Java解析使用JSON的多种方法
作者:yin 时间:2022-08-13 00:18:01
XML的特点是功能全面,但标签繁琐,格式复杂。在Web上使用XML现在越来越少,取而代之的是JSON这种数据结构。JSON是JavaScript Object Notation的缩写,它去除了所有JavaScript执行代码,只保留JavaScript的对象格式。
开发Web应用的时候,使用JSON作为数据传输,在浏览器端非常方便。因为JSON天生适合JavaScript处理,所以,绝大多数REST API都选择JSON作为数据传输格式。现在问题来了:使用Java如何对JSON进行读写?
JSON优缺点介绍
JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于阅读和编写,同时也易于解析和生成,可以在多种语言之间进行数据交换,并有效地提升网络传输效率,同时也易于机器解析和生成。它是基于ECMAScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯。
优点:
1、数据格式比较简单,易于编程人员阅读和编写,同时也易于计算机生成和解析。
2、支持多种语言,包括ActionScript,C,C#,ColdFusion,Java,JavaScript,Perl,PHP,Python,Ruby等语言服务器端语言,便于服务器端的解析。
3、因为JSON格式能够直接被服务器端代码使用,大大简化了服务器端和客户端的代码开发量,但是完成的任务不变,且易于维护。
缺点:
1、语法严谨,必须符合JSON语法规则。
2、要求字符集必须是Unicode,约束性强。
类库选择
在Java中,并没有内置JSON的解析,针对JSON也有标准的JSR 353 API,但是我们在前面讲XML的时候发现,如果能直接在XML和JavaBean之间互相转换是最好的。类似的,如果能直接在JSON和JavaBean之间转换,那么用起来就简单多了。
因此使用JSON需要借助第三方类库。下面是几个常用的 JSON 解析类库:
类型 | 特点 |
传统JSON方式 | 复杂的Json数据转换成实体类存在缺陷,性能和功能不够完善 |
Jackson方式 | 复杂的Json数据转换成实体类存在缺陷,性能和功能优于传统方式 |
Gson方式 | 功能方面在几种方式中最优,性能方面不如Jackson方式 |
FastJson方式 | 复杂的实体类转换成Json数据存在缺陷,解析json的速度优于其他方式 |
FastJson教程讲解
环境配置
在 Maven 构建的项目中,在 pom.xml 文件中加入以下依赖即可。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
编码
从 Java 变量到 JSON 格式的编码过程如下:
实例
public void testJson() {
JSONObject object = new JSONObject();
//string
object.put("string","string");
//int
object.put("int",2);
//boolean
object.put("boolean",true);
//array
List<Integer> integers = Arrays.asList(1,2,3);
object.put("list",integers);
//null
object.put("null",null);
System.out.println(object);
}
在上例中,首先建立一个 JSON 对象,然后依次添加字符串、整数、布尔值以及数组,最后将其打印为字符串。
输出结果如下:
{"boolean":true,"string":"string","list":[1,2,3],"int":2}
解码
从 JSON 对象到 Java 变量的解码过程如下:
实例
public void testJson2() {
JSONObject object = JSONObject
.parseObject("{\"boolean\":true,\"string\":\"string\",\"list\":[1,2,3],\"int\":2}");
//string
String s = object.getString("string");
System.out.println(s);
//int
int i = object.getIntValue("int");
System.out.println(i);
//boolean
boolean b = object.getBooleanValue("boolean");
System.out.println(b);
//list
List<Integer> integers = JSON.parseArray(object.getJSONArray("list").toJSONString(),Integer.class);
integers.forEach(System.out::println);
//null
System.out.println(object.getString("null"));
}
在上例中,首先从 JSON 格式的字符串中构造一个 JSON 对象,之后依次读取字符串、整数、布尔值以及数组,最后分别打印,打印结果如下:
string
2
true
1
2
3
null
JSON 对象与字符串的相互转化
方法 | 作用 |
---|---|
JSON.parseObject() | 从字符串解析 JSON 对象 |
JSON.parseArray() | 从字符串解析 JSON 数组 |
JSON.toJSONString(obj/array) | 将 JSON 对象或 JSON 数组转化为字符串 |
实例
//从字符串解析JSON对象
JSONObject obj = JSON.parseObject("{\"jb51\":\"脚本之家\"}");
//从字符串解析JSON数组
JSONArray arr = JSON.parseArray("[\"脚本之家\",\"JB51\"]\n");
//将JSON对象转化为字符串
String objStr = JSON.toJSONString(obj);
//将JSON数组转化为字符串
String arrStr = JSON.toJSONString(arr);
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
解析Java内存分配和回收策略以及MinorGC、MajorGC、FullGC
![](https://img.aspxhome.com/file/2023/3/62783_0s.png)
Java如何在临界区中避免竞态条件
Maven安装及MyEclipse中使用Maven
![](https://img.aspxhome.com/file/2023/7/69307_0s.png)
带你了解Java常用类小结
![](https://img.aspxhome.com/file/2023/6/62396_0s.png)
java设计模式之外观模式学习笔记
![](https://img.aspxhome.com/file/2023/8/63688_0s.jpg)
IDEA解决maven包冲突easypoi NoClassDefFoundError的问题
![](https://img.aspxhome.com/file/2023/2/61812_0s.png)
java 中clone()的使用方法
Spring Cloud Gateway不同频率限流的解决方案(每分钟,每小时,每天)
java商城项目实战之购物车功能实现
![](https://img.aspxhome.com/file/2023/0/63340_0s.jpg)
Day14基础不牢地动山摇-Java基础
![](https://img.aspxhome.com/file/2023/7/67617_0s.jpg)
java Swing组件setBounds()简单用法实例分析
![](https://img.aspxhome.com/file/2023/5/70315_0s.png)
Java 把json对象转成map键值对的方法
详谈Java中的Object、T(泛型)、?区别
解决Springboot项目启动后自动创建多表关联的数据库与表的方案
![](https://img.aspxhome.com/file/2023/9/59719_0s.jpg)
Android实现图片设置圆角形式
![](https://img.aspxhome.com/file/2023/6/85456_0s.jpg)
Android SharedPreferences实现记住密码和自动登录界面
![](https://img.aspxhome.com/file/2023/9/83529_0s.png)
详解Java进阶知识注解
![](https://img.aspxhome.com/file/2023/5/65775_0s.png)
JDK集合源码之解析TreeMap(一)
![](https://img.aspxhome.com/file/2023/3/66643_0s.png)
java实现socket客户端连接服务端
![](https://img.aspxhome.com/file/2023/9/69899_0s.png)