• 一个强大的json解析工具类


    该工具类利用递归原理,能够将任意结构的json字符串进行解析。当然,如果需要解析为对应的实体对象时,就不能用了

    package com.wot.cloudsensing.carrotfarm.util;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    /**
     * 将json字符串转换为对应的map等java对象 调用示例: CommonJSONParser commonJSONParser = new
     * CommonJSONParser(); Map<String, Object> result =
     * commonJSONParser.parse(jsonDataStr);
     * 
     */
    public class JSonParserUtil {
        public Map<String, Object> parse(String jsonStr) {
    
            Map<String, Object> result = null;
    
            if (null != jsonStr) {
                try {
    
                    JSONObject jsonObject = new JSONObject(jsonStr);
                    result = parseJSONObject(jsonObject);
    
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } // if (null != jsonStr)
    
            return result;
        }
    
        private Map<String, Object> parseJSONObject(JSONObject jsonObject)
                throws JSONException {
            Map<String, Object> valueObject = null;
            if (null != jsonObject) {
                valueObject = new HashMap<String, Object>();
    
                Iterator<String> keyIter = jsonObject.keys();
                while (keyIter.hasNext()) {
                    String keyStr = keyIter.next();
                    Object itemObject = jsonObject.opt(keyStr);
                    if (null != itemObject) {
                        valueObject.put(keyStr, parseValue(itemObject));
                    } // if (null != itemValueStr)
    
                } // while (keyIter.hasNext())
            } // if (null != valueStr)
    
            return valueObject;
        }
    
        private Object parseValue(Object inputObject) throws JSONException {
    
            Object outputObject = null;
            if (null != inputObject) {
    
                if (inputObject instanceof JSONArray) {
                    outputObject = parseJSONArray((JSONArray) inputObject);
                } else if (inputObject instanceof JSONObject) {
                    outputObject = parseJSONObject((JSONObject) inputObject);
                } else if (inputObject instanceof String
                        || inputObject instanceof Boolean
                        || inputObject instanceof Integer) {
                    outputObject = inputObject;
                }
    
            }
    
            return outputObject;
        }
    
        private List<Object> parseJSONArray(JSONArray jsonArray)
                throws JSONException {
    
            List<Object> valueList = null;
    
            if (null != jsonArray) {
                valueList = new ArrayList<Object>();
    
                for (int i = 0; i < jsonArray.length(); i++) {
                    Object itemObject = jsonArray.get(i);
                    if (null != itemObject) {
                        valueList.add(parseValue(itemObject));
                    }
                } // for (int i = 0; i < jsonArray.length(); i++)
            } // if (null != valueStr)
    
            return valueList;
        }
    }
  • 相关阅读:
    iTOP-4412开发板低功耗高性能的开源硬件平台——上手评测
    迅为三星Exynos 4412开发板四核Cortex-A9ARM安卓linux开发板
    体验更低功耗的开源硬件平台-迅为4412开发板
    【分享】iTOP-4412开发板使用之初体验[多图]
    【嵌入式开发板】大家都在玩儿的4412开发板
    [POJ] 2965.The Pilots Brothers' refrigerator
    [POJ] 1753.Flip Game
    [HDOJ] 1753.大明A+B (大数加法)
    C++ Primer 第五版 一些遇到的注意点记录。
    [HDOJ] 1172.猜数字
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3208520.html
Copyright © 2020-2023  润新知