首页 > 其他分享 >Android项目之JSON解析(3种解析技术详解)

Android项目之JSON解析(3种解析技术详解)

时间:2023-09-12 15:03:58浏览次数:48  
标签:Java name json JSON Android 解析 id


一、用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项目之JSON解析(3种解析技术详解)_JSON

如过用Android Studio做开发的话,可以通过Gradle,直接添加依赖,不用下载jar包,很方便,如下:

Android项目之JSON解析(3种解析技术详解)_Java_02


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

Android项目之JSON解析(3种解析技术详解)_Java_03

Android项目之JSON解析(3种解析技术详解)_Java_04


在github上,我还专门留意了这个,哈哈,gson和fastjson比起来,gson就是“乌龟”

Android项目之JSON解析(3种解析技术详解)_json_05

要使用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字符串{};有兴趣的就去研究一下哈。

    标签:Java,name,json,JSON,Android,解析,id
    From: https://blog.51cto.com/u_14523369/7445405

    相关文章

    • android-解决 Android N 上 报错:android.os.FileUriExposedException
      我们使用手机的时候经常会看到应用程序提示升级,大部分应用内部都需要实现升级提醒和应用程序文件(APK文件)下载。一般写法都差不多,比如在启动app的时候,通过api接口获得服务器最新的版本号,然后和本地的版本号比较,来判断是否需要弹出提示框下载,当然也可以通过推送的自定义消息来实现......
    • Android基础入门教程——8.1.1 Android中的13种Drawable小结 Part 1
      本节引言:从本节开始我们来学习Android中绘图与动画中的一些基础知识,为我们进阶部分的自定义 打下基础!而第一节我们来扣下Android中的Drawable!Android中给我们提供了多达13种的 Drawable,本节我们就来一个个撸一遍!Drawable资源使用注意事项Drawable分为两种: 一种是我们普通的图片......
    • 关于intent之android.intent.action.USER_PRESENT的接收与使用
      在做解锁监听程序时,一开始采用监听屏幕SCREEN_ON和SCREEN_OFF这两个action。但奇怪的是,这两个action只能通过代码动态的形式注册,才能被监听到,使用AndroidManifest.xml完全监听不到。百度后发现这是PowerManager那边在发这个广播的时候做了限制,限制只能有register到代......
    • Android之ListView详解
      前文ListView作为Android最常用的控件之一,同时也是最难的控件之一,其难点主要在意用法的多变性,因此让众多的初学者都比较难掌握,包括我自己,也是在反复需要使用时,总会卡住.而在网上找了众多的ListView的实例,案例等,讲解得不尽人意,甚至让许多初学者有迷惑.所以才觉得写此文,将......
    • android 很棒的UI合集 都是git地址很不错的需要makedown配合使用
      MaterialNameLicenseDemoMaterialDesignLibraryApacheLicenseV2DrawerArrowDrawableApacheLicenseV2MaterialTabsApacheLicenseV2PagerSlidingTabStripApacheLicenseV2material-rippleApacheLicenseV2RippleEffectMITLDrawerApacheLicenseV2material-design-icons......
    • Android静默安装实现方案
      之前有很多朋友都问过我,在Android系统中怎样才能实现静默安装呢?所谓的静默安装,就是不用弹出系统的安装界面,在不影响用户任何操作的情况下不知不觉地将程序装好。虽说这种方式看上去不打搅用户,但是却存在着一个问题,因为Android系统会在安装界面当中把程序所声明的权限展示给用户看,......
    • 快解析内网穿透如何帮你轻松实现外网远程连接?
      外网相信大家多少了解一点,其实就是连接不同地区局域网,或者是城域网计算机通信的远程网,因此被称为广域网或者公网。在这个互联网信息时代,很多用户还是不知道怎么连接外网?外网远程桌面连接的步骤是怎样的?下文一起来了解一下。外网是什么意思?外网又被称为广域网,它可以连接极其大的物理......
    • ARP协议:地址解析协议
      ARP协议最早在1982年提出,并在RFC826中进行规范。其全称为AddressResolutionProtocol,即地址解析协议。在以太网中,一台主机要向另一台主机发送数据,必须知道目标主机的MAC地址。但在IP通信中,只知道目标主机的IP地址是不够的,还需要通过ARP协议将IP地址解析为对应的MAC地址。每台安装......
    • Android开发中常见的设计模式
      Android开发中常见的设计模式对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次。而在android开发中,必要的了解一些设计模式又是非常有必要的。对于想系统的学习设计模式的同学,这里推荐2本书。一本是HeadFirst系列的HeadH......
    • Android入门教程 | TextView简介(宽高、文字、间距)
      TextView简介文字,是我们传达信息的一种常见方式。在安卓应用上显示文字,我们通常使用TextView。之前我们已经知道如何获取到layout中的TextView,也知道setText()方法可以修改显示的文字。结合我们实际的生活和学习经验,写字的时候,有哪些方面是可以由我们来控制的?文本内容;文字颜色;大......