特殊json字符串解析

本文介绍了一种解析复杂JSON数据的方法,通过自定义的CommonJSONParser类将JSON字符串逐层转化为Java Map对象,便于进一步处理和访问。文章展示了如何遍历并提取特定字段的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
String str="{\n" +
        "    \"flag\": true,\n" +
        "    \"msg\": \"成功\",\n" +
        "    \"data\": {\n" +
        "        \"orders\": {\n" +
        "            \"2017-05-05\": [\n" +
        "                {\n" +
        "                    \"PRICE\": 5.44,\n" +
        "                    \"ORDER_STATUS\": 1,\n" +
        "                    \"CUSTOMER_NAME\": \"黎叔\",\n" +
        "                    \"GASSTATION_ID\": 15,\n" +
        "                    \"CAR_ID\": 17,\n" +
        "                    \"COMPANY_ID\": 15,\n" +
        "                    \"COMPANY_NAME\": \"测试物流公司\",\n" +
        "                    \"ORDER_NO\": \"1493805638549\",\n" +
        "                    \"CREATE_USER_ID\": 1,\n" +
        "                    \"ORD_DATE\": \"2017-05-05\",\n" +
        "                    \"CUSTOMER_ID\": 1,\n" +
        "                    \"CAR_NUM\": \"京A10001\",\n" +
        "                    \"STAFF_ID\": 1,\n" +
        "                    \"TEAM_ID\": 17,\n" +
        "                    \"CREATE_USER_NAME\": \"1\",\n" +
        "                    \"DATE_KEY\": {\n" +
        "                        \"nanos\": 0,\n" +
        "                        \"time\": 1493913600000,\n" +
        "                        \"minutes\": 0,\n" +
        "                        \"seconds\": 0,\n" +
        "                        \"hours\": 0,\n" +
        "                        \"month\": 4,\n" +
        "                        \"year\": 117,\n" +
        "                        \"timezoneOffset\": -480,\n" +
        "                        \"day\": 5,\n" +
        "                        \"date\": 5\n" +
        "                    },\n" +
        "                    \"ID\": 29,\n" +
        "                    \"QTY\": 5,\n" +
        "                    \"TOTAL_PRICE\": 27.2,\n" +
        "                    \"STAFF_NAME\": \"1\",\n" +
        "                    \"TEAM_NAME\": \"测试车队一\",\n" +
        "                    \"CREATE_DATE\": {\n" +
        "                        \"nanos\": 0,\n" +
        "                        \"time\": 1493805639000,\n" +
        "                        \"minutes\": 0,\n" +
        "                        \"seconds\": 39,\n" +
        "                        \"hours\": 18,\n" +
        "                        \"month\": 4,\n" +
        "                        \"year\": 117,\n" +
        "                        \"timezoneOffset\": -480,\n" +
        "                        \"day\": 3,\n" +
        "                        \"date\": 3\n" +
        "                    },\n" +
        "                    \"RECEIPT_URL\": \"1493805647128.jpg\"\n" +
        "                }\n" +
        "            ],\n" +
        "            \"2017-05-03\": [\n" +
        "                {\n" +
        "                    \"PRICE\": 5.44,\n" +
        "                    \"ORDER_STATUS\": 1,\n" +
        "                    \"CUSTOMER_NAME\": \"黎叔\",\n" +
        "                    \"GASSTATION_ID\": 15,\n" +
        "                    \"CAR_ID\": 17,\n" +
        "                    \"COMPANY_ID\": 15,\n" +
        "                    \"COMPANY_NAME\": \"测试物流公司\",\n" +
        "                    \"ORDER_NO\": \"1493805059061\",\n" +
        "                    \"CREATE_USER_ID\": 1,\n" +
        "                    \"ORD_DATE\": \"2017-05-03\",\n" +
        "                    \"CUSTOMER_ID\": 1,\n" +
        "                    \"CAR_NUM\": \"京A10001\",\n" +
        "                    \"STAFF_ID\": 1,\n" +
        "                    \"TEAM_ID\": 17,\n" +
        "                    \"CREATE_USER_NAME\": \"1\",\n" +
        "                    \"DATE_KEY\": {\n" +
        "                        \"nanos\": 0,\n" +
        "                        \"time\": 1493805059000,\n" +
        "                        \"minutes\": 50,\n" +
        "                        \"seconds\": 59,\n" +
        "                        \"hours\": 17,\n" +
        "                        \"month\": 4,\n" +
        "                        \"year\": 117,\n" +
        "                        \"timezoneOffset\": -480,\n" +
        "                        \"day\": 3,\n" +
        "                        \"date\": 3\n" +
        "                    },\n" +
        "                    \"ID\": 28,\n" +
        "                    \"QTY\": 2,\n" +
        "                    \"TOTAL_PRICE\": 10.88,\n" +
        "                    \"STAFF_NAME\": \"1\",\n" +
        "                    \"TEAM_NAME\": \"测试车队一\",\n" +
        "                    \"CREATE_DATE\": {\n" +
        "                        \"nanos\": 0,\n" +
        "                        \"time\": 1493805059000,\n" +
        "                        \"minutes\": 50,\n" +
        "                        \"seconds\": 59,\n" +
        "                        \"hours\": 17,\n" +
        "                        \"month\": 4,\n" +
        "                        \"year\": 117,\n" +
        "                        \"timezoneOffset\": -480,\n" +
        "                        \"day\": 3,\n" +
        "                        \"date\": 3\n" +
        "                    },\n" +
        "                    \"RECEIPT_URL\": \"1493806771838.jpg\"\n" +
        "                },\n" +
        "                {\n" +
        "                    \"PRICE\": 5.44,\n" +
        "                    \"ORDER_STATUS\": 1,\n" +
        "                    \"CUSTOMER_NAME\": \"黎叔\",\n" +
        "                    \"GASSTATION_ID\": 15,\n" +
        "                    \"CAR_ID\": 17,\n" +
        "                    \"COMPANY_ID\": 15,\n" +
        "                    \"COMPANY_NAME\": \"测试物流公司\",\n" +
        "                    \"ORDER_NO\": \"1493805828238\",\n" +
        "                    \"CREATE_USER_ID\": 1,\n" +
        "                    \"ORD_DATE\": \"2017-05-03\",\n" +
        "                    \"CUSTOMER_ID\": 1,\n" +
        "                    \"CAR_NUM\": \"京A10001\",\n" +
        "                    \"STAFF_ID\": 1,\n" +
        "                    \"TEAM_ID\": 17,\n" +
        "                    \"CREATE_USER_NAME\": \"1\",\n" +
        "                    \"DATE_KEY\": {\n" +
        "                        \"nanos\": 0,\n" +
        "                        \"time\": 1493740800000,\n" +
        "                        \"minutes\": 0,\n" +
        "                        \"seconds\": 0,\n" +
        "                        \"hours\": 0,\n" +
        "                        \"month\": 4,\n" +
        "                        \"year\": 117,\n" +
        "                        \"timezoneOffset\": -480,\n" +
        "                        \"day\": 3,\n" +
        "                        \"date\": 3\n" +
        "                    },\n" +
        "                    \"ID\": 30,\n" +
        "                    \"QTY\": 8,\n" +
        "                    \"TOTAL_PRICE\": 43.52,\n" +
        "                    \"STAFF_NAME\": \"1\",\n" +
        "                    \"TEAM_NAME\": \"测试车队一\",\n" +
        "                    \"CREATE_DATE\": {\n" +
        "                        \"nanos\": 0,\n" +
        "                        \"time\": 1493805828000,\n" +
        "                        \"minutes\": 3,\n" +
        "                        \"seconds\": 48,\n" +
        "                        \"hours\": 18,\n" +
        "                        \"month\": 4,\n" +
        "                        \"year\": 117,\n" +
        "                        \"timezoneOffset\": -480,\n" +
        "                        \"day\": 3,\n" +
        "                        \"date\": 3\n" +
        "                    },\n" +
        "                    \"RECEIPT_URL\": \"1493806823526.jpg\"\n" +
        "                }\n" +
        "            ]\n" +
        "        }\n" +
        "    }\n" +
        "}";


代码:


CommonJSONParser commonJSONParser = new CommonJSONParser();
        Map<String, Object> result = commonJSONParser.parse(str);

        for (Map.Entry<String, Object> entry : result.entrySet()) {
            System.out.println("key= " + entry.getKey());
        }

        CommonJSONParser commonJSONParser1 = new CommonJSONParser();
        Map<String, Object> result1 = commonJSONParser1.parse(result.get("data").toString());
        for (Map.Entry<String, Object> entry : result1.entrySet()) {
            System.out.println("key1= " + entry.getKey());
        }

        CommonJSONParser commonJSONParser2 = new CommonJSONParser();
        Map<String, Object> result2 = commonJSONParser2.parse(result1.get("orders").toString());
        for (Map.Entry<String, Object> entry : result2.entrySet()) {
            System.out.println("key2= " + entry.getKey());
            System.out.println("........."+entry.getValue());
        }
//          int num = result.length();
        JSONArray nameList = null;//获取JSONArray
        try {
            JSONObject result3 = new JSONObject(result1.get("orders").toString());//转换为JSONObject
            nameList = result3.getJSONArray("2017-05-03");
            int length = nameList.length();
            String aa = "";
            for(int i = 0; i < length; i++) {//遍历JSONArray

                JSONObject oj = null;
                try {
                    oj = nameList.getJSONObject(i);
                    aa = aa + oj.getString("CUSTOMER_NAME")+"|";
                    Log.d("debugTest",Integer.toString(i)+"  aa-- "+aa);
                    System.out.println("......debugTest1111........"+Integer.toString(i)+"  aa-- "+aa);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
//            Iterator<?> it = result3.keys();
//            String aa2 = "";
//            String bb2 = null;
//            while(it.hasNext()){//遍历JSONObject
//                bb2 = (String) it.next().toString();
//                try {
//                    aa2 = aa2 + result3.getString(bb2);
//                    System.out.println("....debugTest2222....."+bb2+" -- "+aa2);
//                } catch (JSONException e) {
//                    e.printStackTrace();
//                }
//
//            }

        } catch (JSONException e) {
            e.printStackTrace();
        }



帮助类:

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * Created by lys13 on 2017/5/4.
 */

public class CommonJSONParser {

    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 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;
             }

                 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;
             }
}

log:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值