一、简介
JSON:JavaScript Object Notation,JS对象简谱,是一种轻量级的数据交换格式
- json现在多用于存储和交换文本信息的语法
- 进行数据的传输
- JSON 比 XML 更小、更快,更易解析。
二、JSON格式
- 对象格式
一个对象, 由一个大括号表示.
括号中 描述对象的属性 . 通过键值对来描述对象的属性
(可以理解为, 大括号中, 包含的是一个个的键值对.) - 数组格式
在JSON格式中可以与对象互相嵌套
[元素1,元素2…]
三、JSON语法
- 数据在名称/值对中:json数据是由键值对构成的
* 键用引号(单双都行)引起来,也可以不使用引号
* 值得取值类型:
1. 数字(整数或浮点数)
2. 字符串(在双引号中)
3. 逻辑值(true 或 false)
4. 数组(在方括号中) {“persons”:[{},{}]}
5. 对象(在花括号中) {“address”:{“province”:“陕西”…}}
6. null
* 数据由逗号分隔:多个键值对由逗号分隔
* 花括号保存对象:使用{}定义json 格式
* 方括号保存数组:[]
- 获取数据:
1. json对象.键名
2. json对象[“键名”]
3. 数组对象[索引]
4. 遍历 - JSON数据和Java对象的相互转换
* JSON解析器:
常见的解析器:Jsonlib,Gson,fastjson,jackson
四、解析方式
1. Gson
Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串成Java对象。
使用:
String json = new Gson().toJSON(要转换的对象);
Book book = new Gson().fromJson(json, Book.class);
public static void main(String[] args) {
//导包
//1.创建GSON对象
Gson gson = new Gson();
//2. 拿到java对象
Student student = new Student("张三", 18, "热爱学习!");
//3. 调用Gson的toJson方法
String s = gson.toJson(student);
System.out.println(s);
}
public static void main(String[] args) {
//1. 定义json字符串 {"name":"李白","age":21,"info":"伟大的诗人"}
String json = "{\"name\":\"李白\",\"age\":21,\"info\":\"伟大的诗人\"}";
//2. 创建Gson对象
Gson gson = new Gson();
//3. 调用fromJson方法
Student student = gson.fromJson(json, Student.class);
System.out.println(student);
}
2. FastJson
FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
使用:
String json=JSON.toJSONString(要转换的对象);
Book book = JSON.parseObject(json, Book.class);
public static void main(String[] args) {
//1. 对象
Student student = new Student("赵四", 33, "高效全能选手!");
//2. 调用JSON的静态方法 toJSONXxx()
String s = JSON.toJSONString(student);
System.out.println(s);
}
public static void main(String[] args) {
//{"age":33,"info":"高效全能选手!","name":"赵四"}
//1. 定义json字符串
String str = "{\"age\":33,\"info\":\"高效全能选手!\",\"name\":\"赵四\"}";
//2. 调用JSON的parseObject
Student student = JSON.parseObject(str, Student.class);
System.out.println(student);
//json转其他类型
List<String> strings = JSON.parseArray("[\"一二三\",\"二三四\",\"三四五\"]", String.class);
System.out.println(strings.get(1));
}
3. Jackson
Jackson是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架
使用:
writeValueAsString(obj):将对象转为json字符串
writeValue(参数1,obj)
参数
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流
readValue(str,类名.class):字符串转对象
注解
1. @JsonIgnore:排除属性。
2. @JsonFormat:属性值得格式化
@JsonFormat(pattern = “yyyy-MM-dd”)
步骤
1. 导入jackson的相关jar包(注意三个包)
jackson-core-2.2.3.jar:jackson的核心包
jackson-databind-2.2.3.jar:数据映射的包,即ObjectMapper就在这个包
jackson-annotations-2.2.3.jar:jsckson的注解包
2. 创建Jackson核心对象 ObjectMapper
3. 调用ObjectMapper的相关方法进行转换
public static void main(String[] args) throws JsonProcessingException {
//1. 导入jackson的相关jar包
//2. 创建Jackson核心对象 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//对象
Student student = new Student("老樊", 24, "优秀唱作人");
//3. 调用ObjectMapper的相关方法进行转换--writeValueAsString
String s = mapper.writeValueAsString(student);
System.out.println(s);
}
public static void main(String[] args) throws IOException {
//1.创建ObjectMapper对象
ObjectMapper mapper = new ObjectMapper();
//2. json字符串
String str = "{\"name\":\"老樊\",\"age\":24,\"info\":\"优秀唱作人\"}";
//3. 调用ObjectMapper的相关方法进行转换-- readValue
Student student = mapper.readValue(str, Student.class);
System.out.println(student);
}