一、用Android原生技术解析JSON:
特点:很麻烦,对于复杂的json数据解析很容易出错!(不推荐使用)
1、解析JSON对象的API:JsonObject
JSONObject(String json);将Json字符串解析成Json对象;
XxxgetXxx(String name) ;根据name在json对象中得到相应的value。
示例代码:
(1)获取或创建JSON数据(为了方便,这里就直接创建了):
1. String json = "{\n" +
2. "\t\"id\":2, \"name\":\"金鱼\", \n" +
3. "\t\"price\":12.3, \n" +
4. "\t\"imagePath\":\"\"\n" +
5. "}\n";
6.
7. null;
(2)解析Json对象:
1. try {
2. new JSONObject(json);
3. // int id = jsonObject.getInt("id");
4. int id1 = jsonObject.optInt("id");
5.
6. "name");
7.
8. double price = jsonObject.optDouble("price");
9.
10. "imagePath");
11.
12. // 封装Java对象
13. new ShopInfo(id1, name, price, imagePath);
14.
15. catch (JSONException e) {
16. e.printStackTrace();
17. }
注意:这里记得要加try_catch异常处理。
(3)创建JavaBean类,并显示解析后的数据:
1. tv_native_last.setText(shopInfo.toString());
2、解析Json数组的API:JSONArray
JSONArray(String json);将json字符串解析成json数组;
int length();得到json数组中元素的个数;
XxxgetXxx(int s) ;根据下标得到json数组中对应的元素数据。
示例代码:
(1)获取或创建JSON数据:
1. String json = "[\n" +
2. " {\n" +
3. " \"id\": 1,\n" +
4. " \"imagePath\": \"\",\n" +
5. " \"name\": \"金鱼1\",\n" +
6. " \"price\": 12.3\n" +
7. " },\n" +
8. " {\n" +
9. " \"id\": 2,\n" +
10. " \"imagePath\": \"\",\n" +
11. " \"name\": \"金鱼2\",\n" +
12. " \"price\": 12.5\n" +
13. " }\n" +
14. "]";
(2)解析json数组:
(3)
1. try {
2. new JSONArray(json);
3.
4. for (int i = 0; i < jsonArray.length(); i++) {
5. JSONObject jsonObject = jsonArray.getJSONObject(i);
6.
7. if (jsonObject != null) {
8. int id = jsonObject.optInt("id");
9.
10. "name");
11.
12. double price = jsonObject.optDouble("price");
13.
14. "imagePath");
15.
16. // 封装Java对象
17. new ShopInfo(id, name, price, imagePath);
18.
19. shops.add(shopInfo);
20. }
21. }
22. catch (JSONException e) {
23. e.printStackTrace();
24. }
显示解析后的数据:
1. tv_native_last.setText(shops.toString());
到此为止,这就是用原生的技术去解析json了,至于复杂特殊的json数据怎样去解析,也是大同小异了,一层一层解析就对了!
二、用Gson框架技术解析JSON:
特点:解析没那么麻烦,代码量简洁,可以很方便地解析复杂的Json数据,而且谷歌官方也推荐使用。
先放出jar包的下载地址:https://mvnrepository.com/artifact/com.google.code.gson/gson
如过用Android Studio做开发的话,可以通过Gradle,直接添加依赖,不用下载jar包,很方便,如下:
1、用Gson解析JSON对象:
(1)将gson的jar包导入到项目libs目录下,或者直接通过Gradle添加依赖:
1. compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
(2)创建Gson对象:
1. Gson gson = new Gson();
(3)通过创建的Gson对象调用fromJson()方法,返回该json数据对象的Java对象;
1. ShopInfo shopInfo = gson.fromJson(json, ShopInfo.class);
注意要记得创建对象的JavaBean类;要求json对象中的key的名称与Java对象的JavaBean类中的属性名要相同,否则解析不成功!
示例代码如下:
1. // 1 获取或创建JSON数据
2. "{\n" +
3. "\t\"id\":2, \"name\":\"金鱼\", \n" +
4. "\t\"price\":12.3, \n" +
5. "\t\"imagePath\":\"\"\n" +
6. "}\n";
7.
8. // 2 解析JSON数据
9. new Gson();
10.
11. class);
12.
13. // 3 展示数据
14. tv_gson_last.setText(shopInfo.toString());
2、
用Gson解析JSON数组:
(1)(2)与上面相同,要用Gson就要先添加依赖,然后创建Gson对象;
(3)通过创建的Gson对象调用fromJson()方法,返回该json数据对应的Java集合。
这里但强调一下:要记得创建对象的JavaBean类;要求json对象中的key的名称与Java对象的JavaBean类中的属性名要相同,否则解析不成功!
示例代码如下:
1. // 1 获取或创建JSON数据
2. "[\n" +
3. " {\n" +
4. " \"id\": 1,\n" +
5. " \"imagePath\": \"\",\n" +
6. " \"name\": \"金鱼1\",\n" +
7. " \"price\": 12.3\n" +
8. " },\n" +
9. " {\n" +
10. " \"id\": 2,\n" +
11. " \"imagePath\": \"\",\n" +
12. " \"name\": \"金鱼2\",\n" +
13. " \"price\": 12.5\n" +
14. " }\n" +
15. "]";
16.
17. // 2 解析JSON数据
18. new Gson();
19.
20. new TypeToken<List<ShopInfo>>() {
21. }.getType());
22.
23. // 3 展示数据
24. tv_gson_last.setText(shops.toString());
还是那句话,复杂特殊的都是大同小异,理解了方法就没问题了!
3、Gson还可以将Java对象、Java对象的List 转换为json字符串{};有兴趣的就去研究一下哈。
三、用Fastjson框架技术解析JSON:
特点:Fastjson是用Java语言编写的高性能功能完善的JSON库。它采用了一种“假定有序、快速匹配”的算法,
把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。
Fastjson是阿里巴巴开源框架,已经开源到github上了,地址为:https://github.com/alibaba/fastjson
在github上,我还专门留意了这个,哈哈,gson和fastjson比起来,gson就是“乌龟”
要使用Fastjson,也是想Gson一样,先导入jar包,或者在Gradle中添加依赖:
1. compile 'com.alibaba:fastjson:1.1.55.android'
添加好依赖后就可以使用Fastjson了!
1、用Fastjson解析JSON对象:
利用Fastjson的JSON调用parseObject()方法,获取转换后的Java对象。
注意要记得创建对象的JavaBean类;要求json对象中的key的名称与Java对象的JavaBean类中的属性名要相同,否则解析不成功!
示例代码:
1. // 1 获取或创建json数据
2. "{\n" +
3. "\t\"id\":2, \"name\":\"金鱼\", \n" +
4. "\t\"price\":12.3, \n" +
5. "\t\"imagePath\":\"\"\n" +
6. "}\n";
7.
8. // 2 解析JSON数据
9. class);
10.
11. // 3 显示数据
12. tv_fastjson_last.setText(shopInfo.toString());
2.用Fastjson解析JSON数组:
利用Fastjson的JSON调用parseArray()方法,获取转换后的Java集合。
这里但强调一下:要记得创建对象的JavaBean类;要求json对象中的key的名称与Java对象的JavaBean类中的属性名要相同,否则解析不成功!
示例代码:
1. // 1 获取或创建json数据
2. "[\n" +
3. " {\n" +
4. " \"id\": 1,\n" +
5. " \"imagePath\": \"\",\n" +
6. " \"name\": \"金鱼1\",\n" +
7. " \"price\": 12.3\n" +
8. " },\n" +
9. " {\n" +
10. " \"id\": 2,\n" +
11. " \"imagePath\": \"\",\n" +
12. " \"name\": \"金鱼2\",\n" +
13. " \"price\": 12.5\n" +
14. " }\n" +
15. "]";
16.
17. // 2 解析JSON数据
18. class);
19.
20. // 3 显示数据
21. tv_fastjson_last.setText(shopInfos.toString());
3、同样Fastjson也可以
将Java对象、
Java对象的List
转换为json字符串{};有兴趣的就去研究一下哈。