1 JSON解析
1.1 json概述
# 什么是json?
json(js对象标记)是一种轻量级的数据交换格式
# 作用
层次结构简洁且清晰,便于阅读和编写,有效地提升网络传输效率
1.2 json语法
- [] 表示数组
- {} 表示对象
- "" 表示属性名或字符串类型的值
- : 表示属性和值之间的间隔符
- , 表示多个属性的间隔符或多个元素的间隔符
1.3 json解析
1.3.1 FastJSON解析
# 什么是FastJSON
alibaba提供的jar包,现今在json处理上算是最快的jar包
json解析成对象或数组
-
实体类
/**
* 成绩实体类
*/
-
测试类
/**
* json解析
*/
public class JsonParseTest {
?
public static void main(String[] args) {
// json解析成对象
String json1 = "{‘id‘:1,‘name‘:‘JAVAEE-2021-01‘,‘stus‘:[{‘id‘:1,‘name‘:‘zhangsan‘,‘age‘:22}]}";
Grade grade = JSON.parseObject(json1, Grade.class);
System.out.println("成绩:" + grade);
?
// json解析成数组
String json2 = "[‘北京‘,‘上海‘,‘广州‘]";
List<String> citys = JSON.parseArray(json2, String.class);
System.out.println("城市:" + citys);
}
}
对象或数组转换成json字符串
-
测试类
/**
* 转换成json字符串
*/
public class ToJsonTest {
?
public static void main(String[] args) {
// 对象转换成json
List<Student> list = new ArrayList<>();
for(int i=0;i<3;i++){
list.add(new Student(i, "张三", i+20));
}
Grade grade = new Grade(1, "JAVA-EE-2021-01", list);
String json1 = JSON.toJSONString(grade);
System.out.println("json1-->"+json1);
?
// 数组转换成json
String[] citys = new String[]{"北京","上海","广州"};
String json2 = JSON.toJSONString(citys);
System.out.println("json2-->" + json2);
}
}
1.3.2 Jackson解析
# 什么是Jackson?
现今国际最流行的json处理库
# Jackson与fastJson对比
1 Jackson具备强大的兼容性,fastJson几乎没有,而且经常出现小bug
2 fastJson比较快
综上所述:推荐用Jackson,因为fastJson除了快其他方面几乎被Jackson完全干掉了
json解析成对象或数组
package com.qf.test;
?
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qf.entity.Grade;
?
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
?
/**
* json解析
*/
public class JsonParseTest {
?
public static void main(String[] args) throws IOException {
// json解析成对象,jackson不识别单引号,因此双引号需转义
String json1 = "{\"id\":1,\"name\":\"JAVAEE-1703\",\"stus\":[{\"id\":101,\"name\":\"刘一\",\"age\":16}]}";
ObjectMapper mapper = new ObjectMapper();
Grade grade = mapper.readValue(json1, Grade.class);
System.out.println("成绩-->" + grade);
?
// json解析成数组,先转换成集合,再转换成数组
String json2 = "[\"北京\",\"天津\",\"杭州\"]";
List<String> list = mapper.readValue(json2,new TypeReference<List<String>>(){});
System.out.println("array-->"+ Arrays.toString(list.toArray()));
}
}
对象或数组转换成json字符串
package com.qf.test;
?
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qf.entity.Grade;
import com.qf.entity.Student;
?
import java.util.ArrayList;
import java.util.List;
?
/**
* 转换成json字符串
*/
public class ToJsonTest {
?
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
?
// 对象转换成json
List<Student> list = new ArrayList<>();
for(int i=0;i<3;i++){
list.add(new Student(i, "张三", i+20));
}
Grade grade = new Grade(1, "JAVA-EE-2021-01", list);
String json1 = mapper.writeValueAsString(grade);
System.out.println("json1-->"+json1);
?
// 数组转换成json
String[] citys = new String[]{"北京","上海","广州"};
String json2 = mapper.writeValueAsString(citys);
System.out.println("json2-->" + json2);
}
}
1.3.3 浏览器json解析