使用官方JSONObject解析JSON数据的简单方法

1 篇文章 0 订阅

0.前言

你好! 首先你需要准备一份从网上读取的Json数据,关于读取数据可以参考HTTP协议访问网络数据,下列数据结构较为复杂,但是我相信你理解了这部分数据的解析,再去看相对简单或者更难的JSON数据解析都不成问题啦。

1.JSON数据的组成:

大括号{}表示一个对象、中括号[]表示一个数组、双引号“”表示属性值、冒号表示前后关系,一般是冒号前面表示属性名,冒号后面表示属性值

2.划分JSONObject对象{}和JSONArray数组[]:

对于JSON数据可以按照图所示方式标注,我们解析数据的时候正是按照1-6的顺序一层一层的往里面解析,然后展示出来

{①对象
    "code": 0,
    "data": {②对象
        "count": 7,
        "datastreams": [③数组
            {④对象
                "datapoints": [⑤数组
                    {⑥对象
                        "at": "2019-05-09 16:13:13.242",
                        "value": "30.123456,123.56789"
                    },
                    {
                        "at": "2019-05-09 16:13:22.810",
                        "value": "30.123456,124.56789"
                    },
                    {
                        "at": "2019-05-09 16:13:29.019",
                        "value": "31.123456,124.56789"
                    },
                    {
                        "at": "2019-05-09 16:14:27.107",
                        "value": "31.123456,124.56789"
                    },
                    {
                        "at": "2019-05-09 16:14:31.740",
                        "value": "32.123456,124.56789"
                    },
                    {
                        "at": "2019-05-09 16:14:37.499",
                        "value": "32.123456,123.56789"
                    },
                    {
                        "at": "2019-05-09 16:14:41.684",
                        "value": "32.123456,122.56789"
                    }
                ],
                "id": "gps_data"
            }
        ]
    },
    "msg": "succ"
}

3.解析对象:

从JSONObject对象中获取JSONObject对象和JSONArray数组

//解析JSON字符串①对象处的大括号{}
JSONObject jsonObject = new JSONObject(json);
//解析JSON字符串②对象处的大括号{},从①对象中获取
JSONObject dataObject=jsonObject.getJSONObject("data");
//解析JSON字符串//③数组处的大括号{},从②对象中获取
JSONArray datastreamsArray=dataObject.getJSONArray("datastreams");

4.解析数组:

从JSONArray数组中获取JSONObject对象
tip:从数组中取对象是要循环遍历处JSONObject对象

//解析JSON字符串④对象处的大括号{},从③数组中获取
for(int i=0;i<datastreamsArray.length();i++){
    JSONObject jsonObject=datastreamsArray.getJSONObject(i);}

同理可得,后面需要从④对象中获取⑤数组,再从⑤数组中获取⑥对象,最后附上源码

5.源码1:通过LOG将解析后的数据打印出来

public void getJsonList(String json){
    try{
        JSONObject jsonObject=new JSONObject(json);
        JSONObject dataObject=jsonObject.getJSONObject("data");
        JSONArray datastreamsArray=dataObject.getJSONArray("datastreams");
        for(int i=0;i<datastreamsArray.length();i++){
            JSONObject jsonObject=datastreamsArray.getJSONObject(i);
            JSONArray datapointsArray=jsonObject.getJSONArray("datapoints");
            for (int i1=0;i1<datapointsArray.length();i1++){
                JSONObject jsonObject1=datapointsArray.getJSONObject(i1);
                String atStr=jsonObject1.getString("at");
                String valueStr=jsonObject1.getString("value");
                Log.d("time:",atStr);
                Log.d("data:",valueStr);
            }
        }
    }catch (Exception e){
        e.printStackTrace();
    }
}

6.源码2:通过List将解析后的数据显示出来

public static List<HashMap<String,Object>> getJsonList(String json){
    List<HashMap<String,Object>> dataList;
    dataList=new ArrayList<>();
    try{
        JSONObject jsonObject=new JSONObject(json);
        JSONObject dataObject=jsonObject.getJSONObject("data");
        JSONArray datastreamsArray=dataObject.getJSONArray("datastreams");
        for(int i=0;i<datastreamsArray.length();i++){
            JSONObject jsonObject=datastreamsArray.getJSONObject(i);
            JSONArray datapointsArray=jsonObject.getJSONArray("datapoints");
            for (int i1=0;i1<datapointsArray.length();i1++){
                JSONObject jsonObject1=datapointsArray.getJSONObject(i1);
                String atStr=jsonObject1.getString("at");
                String valueStr=jsonObject1.getString("value");
                HashMap<String,Object> map=new HashMap<>();
                map.put("at",atStr);
                map.put("value",valueStr);
                dataList.add(map);
            }
        }
        return dataList;
    }catch (Exception e){
        e.printStackTrace();
    }
    return null;
}

7.编者的话

相信你在理解了本文的思路之后会发现利用JSONObject解析JSON数据是一个非常简单的事情,更加复杂的数据格式对你来说也会思路明确了吧 ,如有疑问欢迎留言相互学习,本文是小姐姐的CSDN首发,请多多关照!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值