Java数据解析之JSON
Java数据解析之JSON
文章大纲
一、JSON介绍
二、常见框架介绍与实战
三、Studio中GsonFormat插件使用
四、项目源码下载(含参考资料)
五、参考文档
一、JSON介绍
- 简介
JSON 的全称是 JavaScript Object Notation,是一种轻量级的数据交换格 式。 - 特点
(1)JSON 比 XML 数据传输的有效性要高出很多
(2)JSON 完全独立于编程语言
(3)本质就是具有特定格式的字符串
- JSON 数据格式
整体结构
String json1 = "{"id":12,"name":"Tom"}"
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} 错误
- 原始的JSON解析实战
将json格式的字符窜{}转换为java对象
API:JsonObject
JSONObject(String json) : 将 json 字符串解析为 json 对象
Xxx getXxx(String name) : 根据 name, 在 json 对象中得到对应的 Value
private void jsonToJavaObjectByNative() {
//获取或者创建json数据 String json = "{\n" + "\t\"id\":2, \"name\":\"大虾\", \n" + "\t\"price\":12.3, \n" + "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" + "}\n"; //解析json JSONObject jsonObject; //使用bean ShopInfo shopinfo = null; try { jsonObject = new JSONObject(json); int id = jsonObject.getInt("id"); int id1 = jsonObject.optInt("id");//最好用opt方法,不会报异常 String name = jsonObject.optString("name");//最好用opt方法,不会报异常 double imagePath = jsonObject.optDouble("price");//最好用opt方法,不会报异常 String price = jsonObject.optString("imagePath");//最好用opt方法,不会报异常 shopinfo= new ShopInfo(id,name,imagePath,price);//把数据放进来 } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
将json格式的字符窜{}转换为java对象的list
API:JSONArray
JSONArray(String json) : 将 json 字符串解析为 json 数组
int length() : 得到 json 数组中元素的个数
Xxx getXxx(int index) : 根据下标得到 json 数组中对应的元素数据
private void jsonToJavaListByNative() {
// TODO Auto-generated method stub //获取或者创建json数据 String json= "[\n" + " {\n" + " \"id\": 1,\n" + " \"imagePath\": \"http://192.168.10.165:8080/f1.jpg\",\n" + " \"name\": \"大虾 1\",\n" + " \"price\": 12.3\n" + " },\n" + " {\n" + " \"id\": 2,\n" + " \"imagePath\": \"http://192.168.10.165:8080/f2.jpg\",\n" + " \"name\": \"大虾 2\",\n" + " \"price\": 12.5\n" + " }\n" + "]"; //存放shopinfo集合 List<ShopInfo> shops =new ArrayList<ShopInfo>(); //解析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");//最好用opt方法,不会报异常 double imagePath = jsonObject.optDouble("price");//最好用opt方法,不会报异常 String price = jsonObject.optString("imagePath");//最好用opt方法,不会报异常 //封装java对象 ShopInfo shopinfo= new ShopInfo(id,name,imagePath,price);//把数据放进来 shops.add(shopinfo); } } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
复杂json数据解析
/**
* 复杂json数据解析 * * 就是第一层是大数据包括第二第三层的,第二层要从第一层里拿到一个key然后获取下面的数据,然后第三层又是从第二层里拿到一个key然后获取里面的数据 * * 一层一层的解析,从大到小 */ private void jsonToJavaOfComplex() { //获取或者创建json数据 String json ="{\n" + " \"data\": {\n" + " \"count\": 5,\n" + " \"items\": [\n" + " {\n" + " \"id\": 45,\n" + " \"title\": \" 坚果\"\n" + " },\n" + " {\n" + " \"id\": 132,\n" + " \"title\": \" 炒货\"\n" + " },\n" + " {\n" + " \"id\": 166,\n" + " \"title\": \" 蜜饯\"\n" + " },\n" + " {\n" + " \"id\": 195,\n" + " \"title\": \" 果脯\"\n" + " },\n" + " {\n" + " \"id\": 196,\n" + " \"title\": \" 礼盒\"\n" + " }\n" + " ]\n" + " },\n" + " \"rs_code\": \"1000\",\n" + " \"rs_msg\": \"success\"\n" + "}"; //封装java对象 DateInfo dateIndo = new DateInfo(); JSONObject jsonObject; //解析json try { jsonObject = new JSONObject(json); //第一层解析一层一层解析 JSONObject date = jsonObject.optJSONObject("data");//date是一个集合 String rs_code = jsonObject.optString("rs_code"); String rs_msg = jsonObject.optString("rs_msg"); //第一层封装 一层一层封装 dateIndo.setRs_code(rs_msg); dateIndo.setRs_msg(rs_msg); DateInfo.DataBean dateBean =new DateInfo.DataBean();//集合 dateIndo.setData(dateBean); //第二层解析 int count =date.optInt("count"); JSONArray items = date.optJSONArray("items"); //第二层数据封装 dateBean.setCount(count);//从集合里面拿数据 List<DateInfo.DataBean.ItemsBean> itemsBean = new ArrayList<DateInfo.DataBean.ItemsBean>(); dateBean.setItems(itemsBean); //第三层解析 for (int i = 0; i < items.length(); i++) { JSONObject jsonObject1= items.optJSONObject(i); if(jsonObject1 != null){ int id = jsonObject1.optInt("id"); String title = jsonObject1.optString("title"); //第三层数据的封装 DateInfo.DataBean.ItemsBean bean = new DateInfo.DataBean.ItemsBean(); bean.setId(id); bean.setTitle(title); itemsBean.add(bean); } } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } //显示json数据 tv_native_orignal.setText(json); tv_native_last.setText(dateIndo.toString()); }
二、常见框架介绍与实战
- GSON
简介
GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。
特点
(1)快速、高效
(2)代码量少、简洁
(3)面向对象
(4)数据传递和解析方便
代码实战
将 json 格式的字符串{}转换为 Java 对象
(1)用到的 API
T fromJson(String json, Class classOfT);//将 json 对象转换为 Java 对象的方法
注意:要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同
(2)使用步骤
将 Gson 的 jar 包导入到项目中
创建Gson对象 : Gson gson = new Gson(); (3)通过创建的Gson对象调用fromJson()方法,返回该JSON数据对应的Java对象
/**
* //将json格式的字符窜{}转换为java对象 */ private void jsonToJavaObjectByGson() { //1获取或创建json数据 String json ="{\n" + "\t\"id\":2, \"name\":\"大虾\", \n" + "\t\"price\":12.3, \n" + "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" + "}\n"; //2解析json数据 Gson gson =new Gson(); //第一个参数是要解析的数据,第二个参数是解析生成的java对象的类 ShopInfo shopInfo = gson.fromJson(json, ShopInfo.class); }
将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 shops = gson.fromJson(json, new
TypeToken>() {}.getType());
private void jsonToJavaListByGson() {
//1获取或创建json数据 String json = "[\n" + " {\n" + " \"id\": 1,\n" + " \"imagePath\": \"http://192.168.10.165:8080/f1.jpg\",\n" + " \"name\": \"大虾 1\",\n" + " \"price\": 12.3\n" + " },\n" + " {\n" + " \"id\": 2,\n" + " \"imagePath\": \"http://192.168.10.165:8080/f2.jpg\",\n" + " \"name\": \"大虾 2\",\n" + " \"price\": 12.5\n" + " }\n" + "]"; //2解析json数据 Gson gson =new Gson(); //List<ShopInfo>:是要返回数据的集合 List<ShopInfo> shops = gson.fromJson(json,new TypeToken<List<ShopInfo>>(){}.getType()); //3显示数据 tv_gson_orignal.setText(json); tv_gson_last.setText(shops.toString()); }
将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);
private void javaToJSONByGson() {
//1获取或创建java数据 ShopInfo shopInfo = new ShopInfo(1,"鲍鱼",250.0,"baoyu"); //2生成json数据 Gson gson = new Gson(); String json = gson.toJson(shopInfo); //3显示数据 tv_gson_orignal.setText(shopInfo.toString()); tv_gson_last.setText(json); }
将 Java 对象的 List 转换为 json 字符串[]
(1)用到的 API
String toJson(Object src);
(2)使用步骤
将 Gson 的 jar 包导入到项目中
创建Gson对象 : Gson gson = new Gson(); (3)通过创建的Gson对象调用toJson()方法,返回json数据:
List shops = new ArrayList<>(); String json = gson.toJson(shops);
/**
* //将java对象的list转换为json字符窜 */ private void javaToJSONArrayByGson() { //1获取或创建java数据 List<ShopInfo> shops =new ArrayList<ShopInfo>(); ShopInfo baoyu = new ShopInfo(1,"鲍鱼",250.0,"baoyu"); ShopInfo longxia = new ShopInfo(1,"龙虾",250.0,"longxia"); shops.add(baoyu); shops.add(longxia); //2生成json数据 Gson gson = new Gson(); String json = gson.toJson(shops); //3显示数据 tv_gson_orignal.setText(shops.toString()); tv_gson_last.setText(json); }
- FastJson
简介
在日常的java项目开发中,JSON的使用越来越频繁,对于Json的处理工具也有很多。接下来就介绍一下阿里开源的一个高性能的JSON框架FastJson,功能完善,完全支持标准JSON库,现在已经越来越受到开发者的青睐。
- 特点
Fastjson 是一个 Java 语言编写的高性能功能完善的 JSON 库。它采用一种“假定有序快速匹配”的算法,把JSONParse的性能提升到极致,是目前Java语言中最快的JSON库。
代码实战
将 json 格式的字符串{}转换为 Java 对象
(1)用到的 API
< T > T parseObject(String json, Class classOfT); //将 json 对象转换为 Java对象的方法
注意:要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同
(2)使用步骤
导入 fastjson 的 jar 包 (2)JSON调用parseObject()方法,获取转换后的Java对象
private void jsonToJavaObjectByFastJson() {
// 1 获取或创建 JSON 数据
String json = "{n" +
"t"id":2, "name":"大虾", n" +
"t"price":12.3, n" +
"t"imagePath":"http://192.168.10.165:8080/L05_Server/images/f1.jpg "n" +
"}n";
// 2 解析 JSON 数据
ShopInfo shopInfo = JSON.parseObject(json, ShopInfo.class);
}
将 json 格式的字符串[]转换为 Java 对象的 List
(1)用到的 API
List parseArray(String json,Class classOfT);//将 json 数组转换为 Java 对象的 list
注意:要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同
(2)使用步骤
导入 fastjson 的 jar 包 (2)JSON调用parseArray()方法,获取转换后的Java集合
private void jsonToJavaListByFastJson() {
// 1 获取或创建 JSON 数据
String json = "[n" +
" {n"+
" "id": 1,n" +
" "imagePath":
"http://192.168.10.165:8080/f1.jpg",n" +
" " " " " "
"name": "大虾 1",n" +
"price": 12.3n" + },n" +
{n"+
"id": 2,n" + "imagePath":
"http://192.168.10.165:8080/f2.jpg",n" +
" "name": "大虾 2",n" +
" "price": 12.5n" + " }n"+
"]";
// 2 解析 JSON 数据
List shopInfos = JSON.parseArray(json, ShopInfo.class);
}
将 Java 对象转换为 json 字符串
(1)用到的 API
String toJSONString(Object object);
(2)使用步骤
导入 fastjson 的 jar 包
JSON调用toJSONString()方法,获取转换后的json数据
private void javaToJsonObjectByFastJson() {
// 1 获取 Java 对象
ShopInfo shopInfo = new ShopInfo(1, "鲍鱼", 250.0, "baoyu");
// 2 生成 JSON 数据
String json = JSON.toJSONString(shopInfo);
// 3 数据显示 tv_fastjson_orignal.setText(shopInfo.toString()); tv_fastjson_last.setText(json);
}
将 Java 对象的 List 转换为 json 字符串[]
(1)用到的 API
String toJSONString(Object object);
(2)使用步骤
导入 fastjson 的 jar 包
JSON调用toJSONString()方法,获取转换后的json数据
private void javaToJsonArrayByFastJson() {
// 1 获取 Java 集合
List shops = new ArrayList<>();
ShopInfo baoyu = new ShopInfo(1, "鲍鱼", 250.0, "baoyu");
ShopInfo longxia = new ShopInfo(2, "龙虾", 251.0, "longxia"); shops.add(baoyu);
shops.add(longxia);
// 2 生成 JSON 数据
String json = JSON.toJSONString(shops);
// 3 数据显示 tv_fastjson_orignal.setText(shops.toString()); tv_fastjson_last.setText(json);
}
三、Studio中GsonFormat插件使用
- GsonFormat是什么
可根据xml内容快速生成bean类的插件 - 使用方法
打开 Android studio 页面,点击设置按钮
点击 Plugins 按钮
在右侧输入框中输入 gsonformat,然后点击中间部位的 Browse(必须在联网情况下点击)
选择 GsonFormat,点击右侧的安装插件
重启一下 Android studio
在 Android studio 中创建一个类
在该类中同时按下 alt+shift+s,并点击 GsonFormat
四、项目源码下载(含参考资料)
链接:https://pan.baidu.com/s/1PEz1jMc6B2CvB8HQn6A-pg
密码:rpjy
五、参考文档
http://www.atguigu.com
https://www.cnblogs.com/1024zy/p/6370305.html
原文地址https://www.cnblogs.com/WUXIAOCHANG/p/10657050.html
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
C#8.0可空引用类型的使用注意要点
C#8.0可空引用类型的使用注意要点最近VS2019正式版发布了,装下来顺便试用了一下C#8.0,最大的看点应该就是可空引用类型了。不过C#8.0仍然处于Beta的状态,而且试用时也遇到了几个坑。 背景知识说明: 所谓的可空引用类型是指,一旦启用了可空引用类型这个新特征,引用类型将默认被视为不可空,无法赋予null,除非手工将它设为可空引用类型。 实战示例: 首先是新建一个C#的项目,在 项目文件(.csproj)里加入两行配置,目的是启用“C#8.0语言”和“可空引用类型”: 8.0enable整个文件看起来是这样的: 这样就算是整个项目全局启用了可空引用类型了。 注意: 在VS2019正式版中,使用 enable而不是使用 true后者在正式版中已经失效了。 如果不希望全局启用可空引用类型的话,可以在程序代码中加入以下编译指令: nullable enable 这样可以在加入了该指令的文件中,单独启用可空引用类型。但是,极度不推荐这种做法。为什么呢?因为该指令仅仅在该文件中有效,不能跨文件生效,从而无法阻止null逃逸到使用了该指令的文件中,也就是说,用了也等于没用。 一个很简单的...
- 下一篇
在 CentOS/Fedora 下安装 JAVA 环境
在 CentOS/Fedora 下安装 JAVA 环境介绍本文介绍如何在 CentOS 7(6/6.5)、 Fedora、RHEL 上安装 Java。Java是一个流行的软件平台,允许您运行Java应用程序。 本文涵盖了以下Java版本的安装: OpenJDK 8Oracle Java 8先决条件在开始之前,您应该有一个能够执行 root 权限命令的用户账户。 Java的变化Java平台有三个不同版本:标准版(SE)、企业版(EE)和微型版(ME)。本文主要关注Java SE。 可以安装两个不同的Java SE包:Java运行时环境(JRE)和Java Development Kit(JDK)。JRE是Java虚拟机(JVM)的一种实现,它允许您运行已编译的Java应用程序和applet。JDK包括JRE及开发和编译Java应用所需的其他软件。 还有两种不同的Java实现:OpenJDK 和 Oracle Java。这两种实现都基于相同的代码,但 OpenJDK(Java的参考实现)是完全开源的,而Oracle Java包含一些专有代码。 您可以在单个系统上安装各种版本的Java,但大...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- 2048小游戏-低调大师作品
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS关闭SELinux安全模块
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 设置Eclipse缩进为4个空格,增强代码规范
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作