文章目录
1. 详说json
1.1 何为json
json
的全称为:JavaScript Object Notation
,是一种轻量级的数据交互格式。
采用完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构使得JSON
成为理想的数据交换语言。
易于阅读和编写,同时也易于解析和生成,并有效地提升网络传输效率。
1.2 json语法
json
数据格式:主要由对象 { }
和数组 [ ]
组成。
- 对象
-
包括键值对({属性:属性值},比如
{key:value}
,value
可为str
,num
,list
,obj
。 -
{key:value, key2:value2,}
键:值用:
分开,对间用,
连接。
- 数组
- 包含元素:
num
,str
,list
,objcet
都可以,利用索引访问[index]
,用.
连接各个值。
如下代码所示:
{
"student": [{
"name": "Tom",
"Grade": 1,
"age": 11,
"gender": "M"
},
{
"name": "Jerry",
"Grade": 1,
"age": 10,
"gender": "M"
}
],
"classroom": {
"class1": "room1",
"class2": "room2"
}
}
2. Java解析与生成JSON的四种方式
首先创建学生(Student
)类,如下代码所示:
package com.superjson.superjsonmanager;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author zby
* @datetime 2022/8/30 15:29
* @desc 测试学生类
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private String name;
private String sex;
private int age;
public static Student getInstance() {
Student student = new Student();
student.setName("念兮为美");
student.setAge(16);
student.setSex("男");
return student;
}
public static String getJsonString() {
return "{\"sex\":\"男\",\"name\":\"念兮为美\",\"age\":16}";
}
}
上述代码创建两个静态方法:
-
getInstance
方法用来实例化Student
对象。 -
getJsonString
方法用来获取json
字符串信息。
2.1 传统方式
- 由
Student
实体类生成json
字符串,如下代码所示:
@Test
public void testStudentToJsonOnTraditionalWay() throws JSONException {
// 1. 创建student实体类s
Student student = Student.getInstance();
// 2. 封装json
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", student.getName());
jsonObject.put("age", student.getAge());
jsonObject.put("sex", student.getSex());
// 3. 输出
System.out.println(jsonObject.toString());
}
输出结果如下图:
- 由
json
字符串生成Student
实体类
@Test
public void testJsonToStudentTraditionalWay() throws JSONException {
JSONObject jsonObject = new JSONObject(Student.getJsonString());
Student student =
new Student(
jsonObject.get("name").toString(),
jsonObject.get("sex").toString(),
Integer.valueOf(jsonObject.get("age").toString())
);
System.out.println(student);
}
输出结果如下图:
2.2 利用Jackson方式
- 由
Student
实体类生成json
字符串
@Test
public void testStudentToJsonOnJackson() throws JsonProcessingException {
// 1. 创建student实体类s
Student student = Student.getInstance();
// 2. 封装json
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(student);
// 3. 输出json
System.out.println(jsonString);
}
输出结果如下图:
- 由
json
字符串生成student
实体类
@Test
public void testJsonToStudentOnJackson() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
Student student = objectMapper.readValue(Student.getJsonString(), Student.class);
System.out.println(student);
}
输出结果如下图:
2.3 利用Gson方式
- 由
Student
实体类生成json
字符串
@Test
public void testStudentToJsonOnGson() {
// 1. 创建student实体类s
Student student = Student.getInstance();
// 2. 封装json
Gson gson = new Gson();
String jsonString = gson.toJson(student);
// 3. 输出json
System.out.println(jsonString);
}
输出结果如下图:
- 由
json
字符串生成Student
实体类
@Test
public void testJsonToStudentOnGson() {
Gson gson = new Gson();
Student student = gson.fromJson(Student.getJsonString(), Student.class);
System.out.println(student);
}
输出结果如下图:
2.4 利用FastJSON方式
- 由
Student
实体类生成json
字符串
@Test
public void testStudentToJsonOnFastJson() {
// 1. 创建student实体类s
Student student = Student.getInstance();
// 2. 封装json
Object jsonString = JSON.toJSON(student);
// 3. 输出json
System.out.println(jsonString);
}
输出结果如下图:
- 由
json
字符串生成Student
实体类
@Test
public void testJsonToStudentOnFastJson() {
Student person = JSON.parseObject(Student.getJsonString(), Student.class);
System.out.println(person.toString());
}
输出结果如下图:
3. 四种方式比较
如下是这四种方式的比较
类型 | 简介 |
---|---|
传统json 方式 |
复杂的json 数据转换成实体类存在缺陷,性能和功能不够完善 |
Jackson 方式 |
复杂的json 数据转换成实体类存在缺陷,性能和功能优于传统方式 |
Gson 方式 |
功能方面在几种方式中最优,性能方面不如jackson 方式 |
FastJson 方式 |
复杂的实体类转换成json 数据存在缺陷,解析json 的速度优于其他方式 |
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99144.html