1 JSON
JSON是一种非常通用和流行的数据格式,本质上一个字符串,通过定义一些字符串组织规则来表示键值对。规则如下
- 对象使用
{}
表示,其中使用:
来分割键和值- 键必须是字符串类型,用
""
包起来 - 值可以是值可以是字符串、数字、布尔值、对象、数组或null。
- 键必须是字符串类型,用
- 数组使用
[]
表示数组中的元素可以是字符串、数字、布尔值、对象、数组或null。
举例说明
{
"name": "xioaming", //键值对,string : string
"age": 22.34, //键值对,string : float
"fruits": ["apple", "pear", "grape"], //键值对,string : array
"hard": { //键值对,string : object
"身高": 1.78,
"工作": ["程序员", "健身教练"]
}
}
2 在java中使用json
现在我们得到了一个JSON字符串了,但是我们的JAVA程序只是认为它是一个字符串,不懂得其中意义(如数据类型,键值对的对应关系),这时候java需要做一件事—反序列化,也就是将字符串变成java对象,便于操作。
不同的公司或者组织给我们提供了不同的JSON解析方案,其中著名的有
- Jackson是一个非常流行的JSON处理库,提供了高性能和灵活的JSON解析和生成功能。它可以将JSON数据映射到Java对象中,并将Java对象转换为JSON格式。Jackson还支持注解,可以用于进一步控制JSON与Java对象之间的映射关系。
- FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
- org.json:
org.json是Java提供的一个简单的JSON解析器和生成器。它包含在Java标准库中,并提供了解析和生成JSON数据的基本功能。虽然功能相对较简单,但对于简单的JSON操作,它是一个轻量级和易于使用的选择。
一般来说,这些解析方案提供了以下关于json的方法
- 序列化和反序列化(重点): 将JSON对象序列化为字符串,或将JSON字符串反序列化为对象。序列化是将数据对象转换为JSON字符串,反序列化是将JSON字符串转换为数据对象。
- 创建JSON对象: 可以使用编程语言提供的函数、类或库来创建JSON对象。通常,这些函数或方法接受键值对作为参数,用于指定JSON对象的属性和对应的值。
- 访问和修改JSON对象的属性: 通过键访问JSON对象的属性,并可以对其进行修改。可以使用编程语言提供的API来访问、读取和修改JSON对象的属性值。
- 遍历JSON数组: 遍历JSON数组中的元素,逐个访问和处理数组中的数据项。使用循环结构来遍历数组,根据索引或迭代器获取数组中的每个元素。
- 嵌套JSON操作: 处理嵌套的JSON结构,包括访问、修改和操作嵌套的对象或数组。可以使用递归、循环等方法来处理嵌套的JSON结构。
JSONObject使用方法(fastjson)
JsonMapper使用方法(Jackson)
另外需要注意一点,使用JsonNode的时候不要使用tostring,会多出来一个""
import lombok.Data;
/**
* @Author ZhaoYongheng
* @Date 2024-01-31 10:26
*/
@Data
public class Person {
private String name;
private String sex;
private int age;
public Person(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public String getSex() {
return sex;
}
public int getAge() {
return age;
}
}
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import java.io.IOException;
/**
* @Author ZhaoYongheng
* @Date 2024-01-31 10:25
*/
public class subTest1 {
@Test
public void EntityToJson() throws IOException {
Person person = new Person("张三", "男", 25);
System.out.println(person.toString());
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(person);
JsonNode jsonNode = objectMapper.readTree(jsonString);
System.out.println(jsonNode.get("sex").toString());
System.out.println(jsonNode.get("sex").asText());
System.out.println(jsonString);
}
}
JavaBean是一种Java语言写成的可重用组件,是指符合如下标准的Java类:
- 类是公共的
- 有一个无参的公共的构造器
- 有属性,且有对应的get、set方法
用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。