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首发,请多多关照!