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”)。一般编译器会有代码方法提示。
错误示范
不能直接访问第二级的键值对。
//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数据的自我解析,有什么问题欢迎评论区留言或者私信,觉得有用或者写的还不错,可以点赞、收藏+关注。