Json数据解析

Json数据简介

Json数据主要分为对象、数组、键值对。

{“result_num”:5,“result”:[{“score”:0.6854481,“name”:“金南瓜”},{“score”:0.3145323,“name”:“南瓜”}],“log_id”:1532360688868669332}

{}表示一个对象,【】表示数组,“name”:5 表示键值对(数据),前面name 表示标识,后面5是值,值可以是int、char、string等类型。“:”冒号用于分隔数据的“名”和“值”,对象和数组可以互相包含,但是对象不可以直接包含对象也不可以直接包含数组,数组不能直接存放数据(键值对)。

java解析json数据

以这个字符串为例

Stringresult = {"result_num":5,"result":[{"score":0.6854481,"name":"金南瓜"},{"score":0.3145323,"name":"南瓜"}],"log_id":1532360688868669332}

先转为json对象(若数据是以【】开始的则需要先转为json数组)

 JSONObject jsonObject = new JSONObject(result);

1、直接获取数据(键值)

int    re1 = jsonObject.getInt("result_num");  // re1 = 5
double re2 = jsonObject.getDouble("log_id");  //  re2 = 1532360688868669332

//这样可以获取到json中的"result_num"对应的值。

同理也可以获取到"log_id"和"result"的值,但是由于数据类型不同使用的方法也不同,这两个需要用到jsonObject.getDouble(“log_id”)和 jsonObject.getJSONArray(“result”)。一般编译器会有代码方法提示。
Json数据解析_第1张图片

错误示范

不能直接访问第二级的键值对。

//String re = jsonObject.getString("name");  
//这样直接获取是错误的,因为该对象中没有直接的“name”这个标志对应的值数据,只有“result”这个标志对应值的数组对象中有“name”这个标志,但是不能直接访问获取。

2、获取数组

JSONArray jsonArray = jsonObject.getJSONArray("result");
//得到的即为"result"对应的数组值
//内容:[{"score":0.6854481,"name":"金南瓜"},{"score":0.3145323,"name":"南瓜"}]
//显然这是一个json数组类型。

3、获取对象

获取数组中的对象

 JSONObject js0 = jsonArray.getJSONObject(0)// {"score":0.6854481,"name":"金南瓜"}
 JSONObject js1 = jsonArray.getJSONObject(1)// {"score":0.3145323,"name":"南瓜"}

显然,这就和正常数组按索引取值是一样的,如果遇到比较多元素的情况,可以使用遍历的方法,来获取数组元素的值。

4、获取值

此时就可以获取“name”中的值了,与第一个的方法一样。

String name0 = js0.getString("name"); //金南瓜
String name1 = js1.getString("name"); //南瓜

通过以上方法就可以把一个完整的json数据完成解析,来获取所有的数据值了。

补充

json数据解析也支持链式编程

 String re= jsonArray.getJSONObject(0).getString("name");// 金南瓜

这样也可以得到“name”中的值。

以此类推,json数据的解析其实也就是一层一层解析,通过对应的标号名来获取对应的值来获取数据,归根结底就是要去一层一层找标号名(索引名),然后通过名就可以得到实际需要的数据。

json数据的组成方式是千变万化的,但是归根结底都是对象、数组、名值对这三个组成,只要掌握了以上的方法,灵活运用,基本就可以实现任意json数据的自我解析,有什么问题欢迎评论区留言或者私信,觉得有用或者写的还不错,可以点赞、收藏+关注。

你可能感兴趣的:(json,java,开发语言)