文章大纲

一、JSON介绍
二、常见框架介绍与实战
三、Studio中GsonFormat插件使用
四、项目源码下载(含参考资料)
五、参考文档

 

一、JSON介绍

1. 简介

  JSON 的全称是 JavaScript Object Notation,是一种轻量级的数据交换格 式。

2. 特点

(1)JSON 比 XML 数据传输的有效性要高出很多
(2)JSON 完全独立于编程语言
(3)本质就是具有特定格式的字符串

3. JSON 数据格式

整体结构

  1. String json1 = "{"id":12,"name":"Tom"}"
  2. String json2 = "[{"id":12,"name":"Tom"},{"id":12,"name":"Tom"}]"

Json 数组
(1)Json 数组的结构: [value1, value2, value3]
(2)例子:
[1, “ab”,[], {“n”:123, “b”:”abc”}] 正确 [1, “a”:3] 错误

Json 对象
(1)Json 对象的结构: {key1:value1, key2:value2, key3:value3}
(2)key 的数据类型: 字符串
(3)value 的数据类型: 数值、字符串、null、json 数组 []、json 对象 {} (4)例子:
{“name”:”TOM”,“age”:12} 正确 {“aa”:“a”, 3} 错误

4. 原始的JSON解析实战

将json格式的字符窜{}转换为java对象

API:JsonObject
JSONObject(String json) : 将 json 字符串解析为 json 对象
Xxx getXxx(String name) : 根据 name, 在 json 对象中得到对应的 Value

  1. private void jsonToJavaObjectByNative() {
  2. //获取或者创建json数据
  3. String json = "{\n" +
  4. "\t\"id\":2, \"name\":\"大虾\", \n" +
  5. "\t\"price\":12.3, \n" +
  6. "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" +
  7. "}\n";
  8. //解析json
  9. JSONObject jsonObject;
  10. //使用bean
  11. ShopInfo shopinfo = null;
  12. try {
  13. jsonObject = new JSONObject(json);
  14. int id = jsonObject.getInt("id");
  15. int id1 = jsonObject.optInt("id");//最好用opt方法,不会报异常
  16. String name = jsonObject.optString("name");//最好用opt方法,不会报异常
  17. double imagePath = jsonObject.optDouble("price");//最好用opt方法,不会报异常
  18. String price = jsonObject.optString("imagePath");//最好用opt方法,不会报异常
  19. shopinfo= new ShopInfo(id,name,imagePath,price);//把数据放进来
  20. } catch (JSONException e) {
  21. // TODO Auto-generated catch block
  22. e.printStackTrace();
  23. }
  24. }

将json格式的字符窜{}转换为java对象的list

API:JSONArray
JSONArray(String json) : 将 json 字符串解析为 json 数组
int length() : 得到 json 数组中元素的个数
Xxx getXxx(int index) : 根据下标得到 json 数组中对应的元素数据

  1. private void jsonToJavaListByNative() {
  2. // TODO Auto-generated method stub
  3. //获取或者创建json数据
  4. String json= "[\n" +
  5. " {\n" +
  6. " \"id\": 1,\n" +
  7. " \"imagePath\": \"http://192.168.10.165:8080/f1.jpg\",\n" + " \"name\": \"大虾 1\",\n" + " \"price\": 12.3\n" +
  8. " },\n" +
  9. " {\n" +
  10. " \"id\": 2,\n" +
  11. " \"imagePath\": \"http://192.168.10.165:8080/f2.jpg\",\n" +
  12. " \"name\": \"大虾 2\",\n" +
  13. " \"price\": 12.5\n" +
  14. " }\n" +
  15. "]";
  16. //存放shopinfo集合
  17. List<ShopInfo> shops =new ArrayList<ShopInfo>();
  18. //解析json
  19. try {
  20. JSONArray jsonArray = new JSONArray(json);
  21. //遍历数组
  22. for (int i = 0; i < jsonArray.length(); i++) {
  23. JSONObject jsonObject = jsonArray.getJSONObject(i);
  24. //判断数据是否为空
  25. if(jsonObject != null){
  26. int id=jsonObject.optInt("id");
  27. String name = jsonObject.optString("name");//最好用opt方法,不会报异常
  28. double imagePath = jsonObject.optDouble("price");//最好用opt方法,不会报异常
  29. String price = jsonObject.optString("imagePath");//最好用opt方法,不会报异常
  30. //封装java对象
  31. ShopInfo shopinfo= new ShopInfo(id,name,imagePath,price);//把数据放进来
  32. shops.add(shopinfo);
  33. }
  34. }
  35. } catch (JSONException e) {
  36. // TODO Auto-generated catch block
  37. e.printStackTrace();
  38. }
  39. }

复杂json数据解析

  1. /**
  2. * 复杂json数据解析
  3. *
  4. * 就是第一层是大数据包括第二第三层的,第二层要从第一层里拿到一个key然后获取下面的数据,然后第三层又是从第二层里拿到一个key然后获取里面的数据
  5. *
  6. * 一层一层的解析,从大到小
  7. */
  8. private void jsonToJavaOfComplex() {
  9. //获取或者创建json数据
  10. String json ="{\n" +
  11. " \"data\": {\n" +
  12. " \"count\": 5,\n" +
  13. " \"items\": [\n" +
  14. " {\n" +
  15. " \"id\": 45,\n" +
  16. " \"title\": \" 坚果\"\n" +
  17. " },\n" +
  18. " {\n" +
  19. " \"id\": 132,\n" +
  20. " \"title\": \" 炒货\"\n" +
  21. " },\n" +
  22. " {\n" +
  23. " \"id\": 166,\n" +
  24. " \"title\": \" 蜜饯\"\n" +
  25. " },\n" +
  26. " {\n" +
  27. " \"id\": 195,\n" +
  28. " \"title\": \" 果脯\"\n" +
  29. " },\n" +
  30. " {\n" +
  31. " \"id\": 196,\n" +
  32. " \"title\": \" 礼盒\"\n" +
  33. " }\n" +
  34. " ]\n" +
  35. " },\n" +
  36. " \"rs_code\": \"1000\",\n" +
  37. " \"rs_msg\": \"success\"\n" +
  38. "}";
  39. //封装java对象
  40. DateInfo dateIndo = new DateInfo();
  41. JSONObject jsonObject;
  42. //解析json
  43. try {
  44. jsonObject = new JSONObject(json);
  45. //第一层解析一层一层解析
  46. JSONObject date = jsonObject.optJSONObject("data");//date是一个集合
  47. String rs_code = jsonObject.optString("rs_code");
  48. String rs_msg = jsonObject.optString("rs_msg");
  49. //第一层封装 一层一层封装
  50. dateIndo.setRs_code(rs_msg);
  51. dateIndo.setRs_msg(rs_msg);
  52. DateInfo.DataBean dateBean =new DateInfo.DataBean();//集合
  53. dateIndo.setData(dateBean);
  54. //第二层解析
  55. int count =date.optInt("count");
  56. JSONArray items = date.optJSONArray("items");
  57. //第二层数据封装
  58. dateBean.setCount(count);//从集合里面拿数据
  59. List<DateInfo.DataBean.ItemsBean> itemsBean = new ArrayList<DateInfo.DataBean.ItemsBean>();
  60. dateBean.setItems(itemsBean);
  61. //第三层解析
  62. for (int i = 0; i < items.length(); i++) {
  63. JSONObject jsonObject1= items.optJSONObject(i);
  64. if(jsonObject1 != null){
  65. int id = jsonObject1.optInt("id");
  66. String title = jsonObject1.optString("title");
  67. //第三层数据的封装
  68. DateInfo.DataBean.ItemsBean bean = new DateInfo.DataBean.ItemsBean();
  69. bean.setId(id);
  70. bean.setTitle(title);
  71. itemsBean.add(bean);
  72. }
  73. }
  74. } catch (JSONException e) {
  75. // TODO Auto-generated catch block
  76. e.printStackTrace();
  77. }
  78. //显示json数据
  79. tv_native_orignal.setText(json);
  80. tv_native_last.setText(dateIndo.toString());
  81. }

二、常见框架介绍与实战

1. GSON

简介
  GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。

特点
(1)快速、高效
(2)代码量少、简洁
(3)面向对象
(4)数据传递和解析方便

代码实战

将 json 格式的字符串{}转换为 Java 对象
(1)用到的 API
  <T> T fromJson(String json, Class<T> classOfT);//将 json 对象转换为 Java 对象的方法
  注意:要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同
(2)使用步骤
  将 Gson 的 jar 包导入到项目中
  创建Gson对象 : Gson gson = new Gson(); (3)通过创建的Gson对象调用fromJson()方法,返回该JSON数据对应的Java对象

  1. /**
  2. * //将json格式的字符窜{}转换为java对象
  3. */
  4. private void jsonToJavaObjectByGson() {
  5. //1获取或创建json数据
  6. String json ="{\n" +
  7. "\t\"id\":2, \"name\":\"大虾\", \n" +
  8. "\t\"price\":12.3, \n" +
  9. "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" +
  10. "}\n";
  11. //2解析json数据
  12. Gson gson =new Gson();
  13. //第一个参数是要解析的数据,第二个参数是解析生成的java对象的类
  14. ShopInfo shopInfo = gson.fromJson(json, ShopInfo.class);
  15. }

将json格式的字符窜{}转换为java对象的list
(1)用到的 API
  T fromJson(String json, Type typeOfT);//将 json 数组转换为 Java 对象的 list 注意:要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同
(2)使用步骤
  将 Gson 的 jar 包导入到项目中
  创建Gson对象 : Gson gson = new Gson(); (3)通过创建的Gson对象调用fromJson()方法,返回该JSON数据对应的Java集合: List<ShopInfo> shops = gson.fromJson(json, new
TypeToken<List<ShopInfo>>() {}.getType());

  1. private void jsonToJavaListByGson() {
  2. //1获取或创建json数据
  3. String json = "[\n" +
  4. " {\n" +
  5. " \"id\": 1,\n" +
  6. " \"imagePath\": \"http://192.168.10.165:8080/f1.jpg\",\n" +
  7. " \"name\": \"大虾 1\",\n" +
  8. " \"price\": 12.3\n" + " },\n" + " {\n" +
  9. " \"id\": 2,\n" +
  10. " \"imagePath\": \"http://192.168.10.165:8080/f2.jpg\",\n" +
  11. " \"name\": \"大虾 2\",\n" +
  12. " \"price\": 12.5\n" + " }\n" +
  13. "]";
  14. //2解析json数据
  15. Gson gson =new Gson();
  16. //List<ShopInfo>:是要返回数据的集合
  17. List<ShopInfo> shops = gson.fromJson(json,new TypeToken<List<ShopInfo>>(){}.getType());
  18. //3显示数据
  19. tv_gson_orignal.setText(json);
  20. tv_gson_last.setText(shops.toString());
  21. }

将java对象转换为json字符窜
(1)用到的 API
  String toJson(Object src);
(2)使用步骤
  将 Gson 的 jar 包导入到项目中
  创建Gson对象 : Gson gson = new Gson(); (3)通过创建的Gson对象调用toJson()方法,返回json数据:
ShopInfo shop = new ShopInfo(1, "鲍鱼", 250.0, ""); String json = gson.toJson(shop);

  1. private void javaToJSONByGson() {
  2. //1获取或创建java数据
  3. ShopInfo shopInfo = new ShopInfo(1,"鲍鱼",250.0,"baoyu");
  4. //2生成json数据
  5. Gson gson = new Gson();
  6. String json = gson.toJson(shopInfo);
  7. //3显示数据
  8. tv_gson_orignal.setText(shopInfo.toString());
  9. tv_gson_last.setText(json);
  10. }

将 Java 对象的 List 转换为 json 字符串[]
(1)用到的 API
  String toJson(Object src);
(2)使用步骤
  将 Gson 的 jar 包导入到项目中
  创建Gson对象 : Gson gson = new Gson(); (3)通过创建的Gson对象调用toJson()方法,返回json数据:
List<ShopInfo> shops = new ArrayList<>(); String json = gson.toJson(shops);

  1. /**
  2. * //将java对象的list转换为json字符窜
  3. */
  4. private void javaToJSONArrayByGson() {
  5. //1获取或创建java数据
  6. List<ShopInfo> shops =new ArrayList<ShopInfo>();
  7. ShopInfo baoyu = new ShopInfo(1,"鲍鱼",250.0,"baoyu");
  8. ShopInfo longxia = new ShopInfo(1,"龙虾",250.0,"longxia");
  9. shops.add(baoyu);
  10. shops.add(longxia);
  11. //2生成json数据
  12. Gson gson = new Gson();
  13. String json = gson.toJson(shops);
  14. //3显示数据
  15. tv_gson_orignal.setText(shops.toString());
  16. tv_gson_last.setText(json);
  17. }

2. FastJson

简介
  在日常的java项目开发中,JSON的使用越来越频繁,对于Json的处理工具也有很多。接下来就介绍一下阿里开源的一个高性能的JSON框架FastJson,功能完善,完全支持标准JSON库,现在已经越来越受到开发者的青睐。

2. 特点
  Fastjson 是一个 Java 语言编写的高性能功能完善的 JSON 库。它采用一种“假定有序快速匹配”的算法,把JSONParse的性能提升到极致,是目前Java语言中最快的JSON库。

代码实战

将 json 格式的字符串{}转换为 Java 对象
(1)用到的 API
  < T > T parseObject(String json, Class<T> classOfT); //将 json 对象转换为 Java对象的方法
  注意:要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同
(2)使用步骤
  导入 fastjson 的 jar 包 (2)JSON调用parseObject()方法,获取转换后的Java对象

  1. private void jsonToJavaObjectByFastJson() {
  2. // 1 获取或创建 JSON 数据
  3. String json = "{\n" +
  4. "\t\"id\":2, \"name\":\"大虾\", \n" +
  5. "\t\"price\":12.3, \n" +
  6. "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\ "\n" +
  7. "}\n";
  8. // 2 解析 JSON 数据
  9. ShopInfo shopInfo = JSON.parseObject(json, ShopInfo.class);
  10. }

将 json 格式的字符串[]转换为 Java 对象的 List
(1)用到的 API
  List<T> parseArray(String json,Class<T> classOfT);//将 json 数组转换为 Java 对象的 list
  注意:要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同
(2)使用步骤
  导入 fastjson 的 jar 包 (2)JSON调用parseArray()方法,获取转换后的Java集合

  1. private void jsonToJavaListByFastJson() {
  2. // 1 获取或创建 JSON 数据
  3. String json = "[\n" +
  4. " {\n"+
  5. " \"id\": 1,\n" +
  6. " \"imagePath\":
  7. \"http://192.168.10.165:8080/f1.jpg\",\n" +
  8. " " " " " "
  9. \"name\": \"大虾 1\",\n" +
  10. \"price\": 12.3\n" + },\n" +
  11. {\n"+
  12. \"id\": 2,\n" + \"imagePath\":
  13. \"http://192.168.10.165:8080/f2.jpg\",\n" +
  14. " \"name\": \"大虾 2\",\n" +
  15. " \"price\": 12.5\n" + " }\n"+
  16. "]";
  17. // 2 解析 JSON 数据
  18. List<ShopInfo> shopInfos = JSON.parseArray(json, ShopInfo.class);
  19. }

将 Java 对象转换为 json 字符串
(1)用到的 API
  String toJSONString(Object object);
(2)使用步骤
  导入 fastjson 的 jar 包
  JSON调用toJSONString()方法,获取转换后的json数据

  1. private void javaToJsonObjectByFastJson() {
  2. // 1 获取 Java 对象
  3. ShopInfo shopInfo = new ShopInfo(1, "鲍鱼", 250.0, "baoyu");
  4. // 2 生成 JSON 数据
  5. String json = JSON.toJSONString(shopInfo);
  6. // 3 数据显示 tv_fastjson_orignal.setText(shopInfo.toString()); tv_fastjson_last.setText(json);
  7. }

将 Java 对象的 List 转换为 json 字符串[]
(1)用到的 API
  String toJSONString(Object object);
(2)使用步骤
  导入 fastjson 的 jar 包
  JSON调用toJSONString()方法,获取转换后的json数据

  1. private void javaToJsonArrayByFastJson() {
  2. // 1 获取 Java 集合
  3. List<ShopInfo> shops = new ArrayList<>();
  4. ShopInfo baoyu = new ShopInfo(1, "鲍鱼", 250.0, "baoyu");
  5. ShopInfo longxia = new ShopInfo(2, "龙虾", 251.0, "longxia"); shops.add(baoyu);
  6. shops.add(longxia);
  7. // 2 生成 JSON 数据
  8. String json = JSON.toJSONString(shops);
  9. // 3 数据显示 tv_fastjson_orignal.setText(shops.toString()); tv_fastjson_last.setText(json);
  10. }

三、Studio中GsonFormat插件使用

1. GsonFormat是什么

  可根据xml内容快速生成bean类的插件

2. 使用方法

打开 Android studio 页面,点击设置按钮

 

点击 Plugins 按钮

 

在右侧输入框中输入 gsonformat,然后点击中间部位的 Browse(必须在联网情况下点击)

 

选择 GsonFormat,点击右侧的安装插件

 

重启一下 Android studio

在 Android studio 中创建一个类

 

在该类中同时按下 alt+shift+s,并点击 GsonFormat

 

四、项目源码下载(含参考资料)

链接:https://pan.baidu.com/s/1PEz1jMc6B2CvB8HQn6A-pg
密码:rpjy

五、参考文档

    1. http://www.atguigu.com
    2. https://www.cnblogs.com/1024zy/p/6370305.html

Java数据解析之JSON的更多相关文章

  1. Java数据解析---JSON

    一.Java数据解析分为:XML解析和JSON解析 XML解析即是对XML文件中的数据解析,而JSON解析即对规定形式的数据解析,比XML解析更加方便 JSON解析基于两种结构: 1.键值对类型 { ...

  2. iOS UI13_数据解析XML_,JSON

    - (IBAction)parserButton:(id)sender { parserXML *parser =[[parserXML alloc] init]; [parser startPars ...

  3. 利用python将excel数据解析成json格式

    利用python将excel数据解析成json格式 转成json方便项目中用post请求推送数据自定义数据,也方便测试: import xlrdimport jsonimport requests d ...

  4. java 字符串解析为json 使用org.json包的JSONObject+JSONArray

    参考: https://blog.csdn.net/xingfei_work/article/details/76572550 java中四种json解析方式 JSONObject+JSONArray ...

  5. Unity3d-XML文件数据解析&amp;JSON数据解析

    1.XML文件数据解析:(首先须要导入XMLParser解析器,The latest released download from:http://dev.grumpyferret.com/unity/ ...

  6. JAVA如何解析多层json数据

    1. 使用标准的Json对象,如org.json.JSONObject json = new org.json.JSONObject(yourJsonString);然后通过get(keyString ...

  7. Java数据解析之XML

    文章大纲 一.XML解析介绍二.Java中XML解析介绍三.XML解析实战四.项目源码下载   一.XML解析介绍   最基础的XML解析方式有DOM和SAX,DOM和SAX是与平台无关的官方解析方式 ...

  8. Java数据解析---PULL

    安卓和JAVA解析xml文件的三种方式: 1.PULL解析 2.SAX解析 3.DOM解析 三者各有所长,依情况选择解析方式 1.PULL和SAX均采用流式解析,意味着只能从头读到底,无法像DOM解析 ...

  9. Java数据解析---SAX

    一.Sax解析 是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档. Sax采用事件驱动的方式解析文档.简单点说,如同在电影院看电影一样,从头到尾看一遍就完了,不能回退(Dom可来来回 ...

随机推荐

  1. Docker最全教程之使用Docker搭建Java开发环境(十七)

    前言 Java是一门面向对象的优秀编程语言,市场占有率极高,但是在容器化实践过程中,发现官方支持并不友好,同时与其他编程语言的基础镜像相比(具体见各语言镜像比较),确实是非常臃肿. 本篇仅作探索,希望 ...

  2. traefik 结合 docker-compose 的快速安装及使用

    traefik 介绍 traefik 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理.负载均衡工具. 它支持多种后台 (Docker, Swarm, Kubernetes, Maratho ...

  3. 结合JDK源码看设计模式——组合模式

    前言: 相信大家都打开过层级很多很多的文件夹.如果把第一个文件夹看作是树的根节点的话,下面的子文件夹就可以看作一个子节点.不过最终我们寻找的还是文件夹中的文件,文件可以看做是叶子节点.下面我们介绍一种 ...

  4. JS,JQ 格式化小数位数

    在<script>中: $(function(){ var num=$(".price").length;/*获取应用了class="price"的 ...

  5. GIS之家小专栏

    专栏简介:WebGIS开发者@GIS之家,一直混迹GIS行业,关注WebGIS开发方向,在本专栏中,分享WebGIS入门开发系列技术文章 核心内容: arcgis api 3.x for js开发系列 ...

  6. Odoo Linux服务器一键安装脚本使用指南

    Odoo安装脚本介绍 为了帮助更多Linux服务器维护人员快速部署Odoo,为此开源智造(OSCG)基于André Schenkels曾经开放的openerp-install-scripts所构建的基 ...

  7. android---动画入门(一)

    android 动画分为两类,View Animation(视图动画)和property Animation(属性动画),View Animation(视图动画)包含了Tween Animation和 ...

  8. windows一机多装mysql,5.5+版本,8.0.11版本

      00.安装第一个mysql,压缩版或者安装版,过程省略,目录如下: 运行中输入“regedit” 进入后,找到      HKEY_LOCAL_MACHINE\SYSTEM\CurrentCont ...

  9. SQL Server关于predicate、density、selectivity、cardinality名词浅析

      在SQL Server中,我们要看懂执行计划和统计信息,我们可能需要深刻理解一些关键词,例如密度(Density).选择性(Selectivity).谓词(predicate).基数(Cardin ...

  10. python3 文件操作练习 r+ w+ a+ 的理解

    突然来一句:“慨然有经略四方之志” 文件操作三部曲:1.先用open打开 2.再写关闭  3.再回到中间写操作     为啥要刚打开就关闭 那是很容易望,所以先写上... 基本格式 f = open( ...