zoukankan      html  css  js  c++  java
  • 一个强大的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;
        }
    }
  • 相关阅读:
    flex 内嵌js文件
    LOADRUNNER 录制脚本的问题
    loadrunner windows 2003 添加性能计数器的问题
    其他的网站能上,微软网站不能上是由病毒引起的
    sql express 静默安装的方方法
    javascript 附件事件时带参数的处理方法
    java 面试题 转载
    windows 域共享的问题
    winform listbox 没有listitem的问题
    对象相交检测示例
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3208520.html
Copyright © 2011-2022 走看看