一、JSON结构体
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写。JSON结构体由两种类型的值构成:简单值和对象。
简单值可以是数字、布尔值、字符串、null。一个字符串是由双引号包裹的文本,由于JavaScript的字符串也使用双引号包裹,因此在JSON中需要将字符串转义。
对象是一个无序的键值对集合。一个对象由花括号包裹,每个键值对由冒号和逗号分隔。键必须是唯一的字符串,值可以是任意类型的JSON结构。
{
"name": "Jack",
"age": 26,
"gender": "male",
"address": {
"city": "New York",
"state": "NY",
"zip": 10001
},
"phoneNumbers": [
{
"type": "home",
"number": "555-1234"
},
{
"type": "work",
"number": "555-5678"
}
]
}
二、JSON结构不同定义泛型
由于JSON结构体中的值可以是多样的类型,而Java中只支持强类型对象,因此需要使用泛型来进行定义。
我们可以使用com.fasterxml.jackson.databind包下的ObjectMapper来将JSON字符串转换为Java对象。为了避免使用时的类型转换,我们可以使用TypeReference类来对泛型进行定义。
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
// 定义一个泛型为Person的TypeReference
TypeReference<List<Person>> typeReference = new TypeReference<List<Person>>(){};
// 将JSON字符串转换为Java对象
ObjectMapper objectMapper = new ObjectMapper();
List<Person> persons = objectMapper.readValue(jsonString, typeReference);
三、JSON结构示例
以下是一些常见的JSON结构示例。
1、一个简单的键值对:
{
"name": "John"
}
2、一个数组,包含多个简单值:
{
"names": ["John", "Mike", "Lily"]
}
3、一个对象,包含多个键值对:
{
"person": {
"name": "John",
"age": 26,
"gender": "male"
}
}
4、一个数组,包含多个对象:
{
"persons": [
{
"name": "John",
"age": 26,
"gender": "male"
},
{
"name": "Mike",
"age": 28,
"gender": "male"
},
{
"name": "Lily",
"age": 25,
"gender": "female"
}
]
}
四、JSON结构化数据
JSON结构化数据是将JSON结构按照特定的结构进行组织和分层,有助于提高JSON数据的可读性和可维护性。
一般可以使用缩进或者空格进行分层,也可以使用格式化工具来进行美化。
以下是一个按照分层进行美化后的JSON结构化数据。
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": false
}
五、JSON结构介绍
JSON结构的优点是简洁、易于阅读和编写,同时也是跨语言和平台的。
JSON结构的缺点是由于其灵活性,在复杂的情况下可能会变得冗长和难以理解。
对于大型的JSON数据,建议使用分层和美化的形式来组织和维护数据。
六、JSON结构比较工具
使用JSON结构比较工具可以方便地比较两个JSON结构之间的差异。
常用的工具有DiffTool、JsonCompare和JsonDiff。
以下是使用Jackson库中的JsonNode类来实现两个JSON结构比较的例子。
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode1 = objectMapper.readTree(jsonString1);
JsonNode jsonNode2 = objectMapper.readTree(jsonString2);
ObjectDiffNode diffResult = ObjectDifferBuilder.buildDefault().compare(jsonNode1, jsonNode2);
List<DiffNode> diffNodes = diffResult.getChildDiffs();
for(DiffNode diffNode : diffNodes) {
System.out.println("path: " + diffNode.getPath() + ", "
+ "left: " + diffNode.getLeft() + ","
+ "right: " + diffNode.getRight());
}
七、JSON结构数据解析
解析JSON结构数据需要使用JSON解析工具。
Java中常用的JSON解析工具有JSON-lib、Jackson和Gson等。
以下是使用Jackson库中的ObjectMapper将JSON字符串解析为Java对象的例子。
ObjectMapper objectMapper = new ObjectMapper(); Person person = objectMapper.readValue(jsonString, Person.class);
八、JSON结构循环
在使用JSON结构循环时,我们需要先将JSON字符串转换为Java对象,然后就可以使用Java中的for循环来遍历JSON结构进行相关操作。
以下是一个例子,将一个含有多个person对象的JSON字符串循环输出。
ObjectMapper objectMapper = new ObjectMapper();
List<Person> persons = objectMapper.readValue(jsonString, new TypeReference<List<Person>>(){});
for(Person person : persons) {
System.out.println("name: " + person.getName() + ", "
+ "age: " + person.getAge() + ","
+ "gender: " + person.getGender());
}
九、JSON结构化入库
在使用JSON结构进行数据入库时,我们需要先将JSON字符串转换为Java对象,然后将Java对象入库。
以下是一个将含有多个person对象的JSON字符串入库的例子。
ObjectMapper objectMapper = new ObjectMapper();
List<Person> persons = objectMapper.readValue(jsonString, new TypeReference<List<Person>>(){});
for(Person person : persons) {
// 将person对象存入数据库
...
}
十、JSON结构的数据选取
在使用JSON结构进行数据选取时,我们需要先将JSON字符串转换为Java对象,然后根据需要的数据进行选取。
以下是一个将从含有多个person对象的JSON字符串中选取特定数据的例子。
ObjectMapper objectMapper = new ObjectMapper();
List<Person> persons = objectMapper.readValue(jsonString, new TypeReference<List<Person>>(){});
for(Person person : persons) {
if(person.getName().equals("John")) {
System.out.println("John's age: " + person.getAge());
}
}
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/200650.html
微信扫一扫
支付宝扫一扫