Android之JSON解析

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: Android之JSON解析

一、'JSON'是什么鬼?
JSON是一种轻量级的数据交换格式,它的全称为“JavaScript Object Notation”;它是基于JavaScript编程语言ECMA-262 3rd Edition-December 1999标准的一种轻量级的数据交换格式,主要用于跟服务器进行交换数据。与JSON相比XML也是一种数据交换格式,XML可以作为跨平台的数据交换格式,但是在JS(JavaScript的简写)中处理XML非常不方便,同时XML标记比数据多,增加了交换产生的流量,而JSON没有附加的任何标记,在JS中可作为对象处理。好吧,说到这里据我所做的项目来看,当下的服务器与客户端数据交换几乎都是用JSON了,所以作为移动开发者的我们务必要吃透JSON解析。接下来主要从以下几个方面来说明JSON。

二、JSON的特点:
1、JSON比XML的数据传递的有效性高;
2、JSON完全独立于编程语言;
3、JSON的本质是具有特定格式的字符串;
4、易于人阅读和编写,同时也易于机器解析和生成。

三、JSON数据格式(JSON对象、JSON数组):
1、JSON对象:{ }

结构:{key1:value1,key2:value2,key3:value3}
key的数据类型:字符串
value的数据类型:字符串、数值、null、JSON对象、JSON数组
例子:

//以key/value键值对形式构建的,正确
{
  "id": "1",
  "name": "xx教程",
  "url": "www.com"
}
//没有以key/value键值对形式构建的,错误
{
  "id", "1",
  "name", "xx教程",
  "url", "www.com"
}

2、JSON数组:[ ]

结构:[value1,value2,value3]
value的数据类型:字符串、数值、null、JSON对象、JSON数组
例子:

//正确
[
  1,
  2,
  3,
  4,
  5
]
//错误
[
  1,
  'cout':
  2,
  3,
  4,
  5
]

四、JSON解析方向:
1、将Java对象(包括集合)转换成JSON格式字符串;(服务端)
2、将JSON格式字符串转换成Java对象(包括集合)。(客户端)
3、JSON和Java之间的转换关系:
      JSON中的对象对应着Java中的对象;
JSON中的数组对应这Java中的集合。

五、JSON解析技术:
1、Android原生技术;
2、Gson框架技术;
3、FastJson框架技术。

用Android原生技术解析JSON:
特点:很麻烦,对于复杂的json数据解析很容易出错!(不推荐使用)
1、解析JSON对象的API:JsonObject
JSONObject(String json);将Json字符串解析成Json对象;
XxxgetXxx(String name) ;根据name在json对象中得到相应的value。
示例代码:
(1)获取或创建JSON数据(为了方便,这里就直接创建了):


String json = "{\n" +  
               "\t\"id\":2, \"name\":\"金鱼\", \n" +  
               "\t\"price\":12.3, \n" +  
               "\t\"imagePath\":\"http://blog.csdn.net/qq_29269233/L05_Server/images/f1.jpg\"\n" +  
               "}\n";  
  

(2)解析Json对象:

ShopInfo shopInfo = null;  
 try {  
            JSONObject jsonObject = new JSONObject(json);  
//            int id = jsonObject.getInt("id");  
            int id1 = jsonObject.optInt("id");  
  
            String name = jsonObject.optString("name");  
  
            double price = jsonObject.optDouble("price");  
  
            String imagePath = jsonObject.optString("imagePath");  
  
            // 封装Java对象  
            shopInfo = new ShopInfo(id1, name, price, imagePath);  
  
        } catch (JSONException e) {  
            e.printStackTrace();  
        }  

注意:这里记得要加try_catch异常处理。
(3)创建JavaBean类,并显示解析后的数据:

tv_native_last.setText(shopInfo.toString());

2、解析Json数组的API:JSONArrayJSONArray(String json);将json字符串解析成json数组;
int length();得到json数组中元素的个数;
XxxgetXxx(int s) ;根据下标得到json数组中对应的元素数据。
示例代码:
(1)获取或创建JSON数据:

String json = "[\n" +  
               "    {\n" +  
               "        \"id\": 1,\n" +  
               "        \"imagePath\": \"http://blog.csdn.net/qq_29269233/f1.jpg\",\n" +  
               "        \"name\": \"金鱼1\",\n" +  
               "        \"price\": 12.3\n" +  
               "    },\n" +  
               "    {\n" +  
               "        \"id\": 2,\n" +  
               "        \"imagePath\": \"http://blog.csdn.net/qq_29269233/f2.jpg\",\n" +  
               "        \"name\": \"金鱼2\",\n" +  
               "        \"price\": 12.5\n" +  
               "    }\n" +  
               "]";  

(2)解析json数组:


try {  
            JSONArray jsonArray = new JSONArray(json);  
  
            for (int i = 0; i < jsonArray.length(); i++) {  
                JSONObject jsonObject = jsonArray.getJSONObject(i);  
  
                if (jsonObject != null) {  
                    int id = jsonObject.optInt("id");  
  
                    String name = jsonObject.optString("name");  
  
                    double price = jsonObject.optDouble("price");  
  
                    String imagePath = jsonObject.optString("imagePath");  
  
                    // 封装Java对象  
                    ShopInfo shopInfo = new ShopInfo(id, name, price, imagePath);  
  
                    shops.add(shopInfo);  
                }  
            }  
        } catch (JSONException e) {  
            e.printStackTrace();  
        }  

(3)显示解析后的数据:


tv_native_last.setText(shops.toString());  

到此为止,这就是用原生的技术去解析json了,至于复杂特殊的json数据怎样去解析,也是大同小异了,一层一层解析就对了!

用Gson框架技术解析JSON:
特点:解析没那么麻烦,代码量简洁,可以很方便地解析复杂的Json数据,而且谷歌官方也推荐使用。
先放出jar包的下载地址:https://mvnrepository.com/artifact/com.google.code.gson/gson
image.png
如过用Android Studio做开发的话,可以通过Gradle,直接添加依赖,不用下载jar包,很方便,如下:
image.png

1、用Gson解析JSON对象:
(1)将gson的jar包导入到项目libs目录下,或者直接通过Gradle添加依赖:

compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'  

(2)创建Gson对象:

Gson gson = new Gson();  

(3)通过创建的Gson对象调用fromJson()方法,返回该json数据对象的Java对象;

ShopInfo shopInfo = gson.fromJson(json, ShopInfo.class);  

注意要记得创建对象的JavaBean类;要求json对象中的key的名称与Java对象的JavaBean类中的属性名要相同,否则解析不成功!
示例代码如下:

// 1 获取或创建JSON数据  
       String json = "{\n" +  
               "\t\"id\":2, \"name\":\"金鱼\", \n" +  
               "\t\"price\":12.3, \n" +  
               "\t\"imagePath\":\"http://blog.csdn.net/qq_29269233/L05_Server/images/f1.jpg\"\n" +  
               "}\n";  
  
       // 2 解析JSON数据  
       Gson gson = new Gson();  
  
       ShopInfo shopInfo = gson.fromJson(json, ShopInfo.class);  
  
       // 3 展示数据  
       tv_gson_last.setText(shopInfo.toString());  

2、用Gson解析JSON数组:
(1)(2)与上面相同,要用Gson就要先添加依赖,然后创建Gson对象;
(3)通过创建的Gson对象调用fromJson()方法,返回该json数据对应的Java集合。
这里但强调一下:要记得创建对象的JavaBean类;要求json对象中的key的名称与Java对象的JavaBean类中的属性名要相同,否则解析不成功!

示例代码如下:

// 1 获取或创建JSON数据  
       String json = "[\n" +  
               "    {\n" +  
               "        \"id\": 1,\n" +  
               "        \"imagePath\": \"http://blog.csdn.net/qq_29269233/f1.jpg\",\n" +  
               "        \"name\": \"金鱼1\",\n" +  
               "        \"price\": 12.3\n" +  
               "    },\n" +  
               "    {\n" +  
               "        \"id\": 2,\n" +  
               "        \"imagePath\": \"http://blog.csdn.net/qq_29269233/f2.jpg\",\n" +  
               "        \"name\": \"金鱼2\",\n" +  
               "        \"price\": 12.5\n" +  
               "    }\n" +  
               "]";  
  
       // 2 解析JSON数据  
       Gson gson = new Gson();  
  
       List<ShopInfo> shops = gson.fromJson(json, new TypeToken<List<ShopInfo>>() {  
       }.getType());  
  
       // 3 展示数据  
       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
image.png
image.png

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

要使用Fastjson,也是想Gson一样,先导入jar包,或者在Gradle中添加依赖:

compile 'com.alibaba:fastjson:1.1.55.android'  

添加好依赖后就可以使用Fastjson了!
1、用Fastjson解析JSON对象:
利用Fastjson的JSON调用parseObject()方法,获取转换后的Java对象。
注意要记得创建对象的JavaBean类;要求json对象中的key的名称与Java对象的JavaBean类中的属性名要相同,否则解析不成功!
示例代码:

// 1 获取或创建json数据  
       String json = "{\n" +  
               "\t\"id\":2, \"name\":\"金鱼\", \n" +  
               "\t\"price\":12.3, \n" +  
               "\t\"imagePath\":\"http://blog.csdn.net/qq_29269233/L05_Server/images/f1.jpg\"\n" +  
               "}\n";  
  
       // 2 解析JSON数据  
       ShopInfo shopInfo = JSON.parseObject(json, ShopInfo.class);  
  
       // 3 显示数据  
       tv_fastjson_last.setText(shopInfo.toString());  

2.用Fastjson解析JSON数组:利用Fastjson的JSON调用parseArray()方法,获取转换后的Java集合。
这里但强调一下:要记得创建对象的JavaBean类;要求json对象中的key的名称与Java对象的JavaBean类中的属性名要相同,否则解析不成功!
示例代码:

// 1 获取或创建json数据  
       String json = "[\n" +  
               "    {\n" +  
               "        \"id\": 1,\n" +  
               "        \"imagePath\": \"http://blog.csdn.net/qq_29269233/f1.jpg\",\n" +  
               "        \"name\": \"金鱼1\",\n" +  
               "        \"price\": 12.3\n" +  
               "    },\n" +  
               "    {\n" +  
               "        \"id\": 2,\n" +  
               "        \"imagePath\": \"http://blog.csdn.net/qq_29269233/f2.jpg\",\n" +  
               "        \"name\": \"金鱼2\",\n" +  
               "        \"price\": 12.5\n" +  
               "    }\n" +  
               "]";  
  
      // 2 解析JSON数据  
       List<ShopInfo> shopInfos = JSON.parseArray(json, ShopInfo.class);  
  
       // 3 显示数据  
       tv_fastjson_last.setText(shopInfos.toString());  

3、同样Fastjson也可以将Java对象、Java对象的List 转换为json字符串{};有兴趣的就去研究一下哈。
到此为止,算是比较详细地介绍了json解析了。

相关文章
|
9月前
|
数据采集 监控 API
告别手动埋点!Android 无侵入式数据采集方案深度解析
传统的Android应用监控方案需要开发者在代码中手动添加埋点,不仅侵入性强、工作量大,还难以维护。本文深入探讨了基于字节码插桩技术的无侵入式数据采集方案,通过Gradle插件 + AGP API + ASM的技术组合,实现对应用性能、用户行为、网络请求等全方位监控,真正做到零侵入、易集成、高稳定。
958 95
|
10月前
|
JSON 缓存 自然语言处理
多语言实时数据微店商品详情API:技术实现与JSON数据解析指南
通过以上技术实现与解析指南,开发者可高效构建支持多语言的实时商品详情系统,满足全球化电商场景需求。
|
12月前
|
存储 JSON 关系型数据库
【干货满满】解密 API 数据解析:从 JSON 到数据库存储的完整流程
本文详解电商API开发中JSON数据解析与数据库存储的全流程,涵盖数据提取、清洗、转换及优化策略,结合Python实战代码与主流数据库方案,助开发者构建高效、可靠的数据处理管道。
|
11月前
|
JSON 算法 API
淘宝商品评论API接口核心解析,json数据返回
淘宝商品评论API是淘宝开放平台提供的数据服务接口,允许开发者通过编程方式获取指定商品的用户评价数据,包括文字、图片、视频评论及评分等。其核心价值在于:
|
9月前
|
JSON Java Go
【GoGin】(2)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法
bind或bindXXX函数(后文中我们统一都叫bind函数)的作用就是将,以方便后续业务逻辑的处理。
491 3
|
JSON 定位技术 PHP
PHP技巧:解析JSON及提取数据
这就是在PHP世界里探索JSON数据的艺术。这场狩猎不仅仅是为了获得数据,而是一种透彻理解数据结构的行动,让数据在你的编码海洋中畅游。通过这次冒险,你已经掌握了打开数据宝箱的钥匙。紧握它,让你在编程世界中随心所欲地航行。
344 67
|
9月前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
1260 0
|
10月前
|
JSON 自然语言处理 API
多语言实时数据淘宝商品评论API:技术实现与JSON数据解析指南
淘宝商品评论多语言实时采集需结合官方API与后处理技术实现。建议优先通过地域站点适配获取本地化评论,辅以机器翻译完成多语言转换。在合规前提下,企业可构建多语言评论数据库,支撑全球化市场分析与产品优化。
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
505 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
|
数据采集 JSON 数据可视化
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
888 4
JSON数据解析实战:从嵌套结构到结构化表格

热门文章

最新文章

推荐镜像

更多