IT评测·应用市场-qidao123.com技术社区
标题:
JSON串
[打印本页]
作者:
玛卡巴卡的卡巴卡玛
时间:
2024-11-9 17:37
标题:
JSON串
JSON在客户端的使用
JSON 字符串的格式是基于键值对的数据结构,用于表现结构化数据。它遵循严格的语法规则,
常用于前后端数据交互。
1.
根本结构
JSON 数据结构由两种主要元素构成:
对象(Object)
:用花括号 {} 困绕,包含键值对。
数组(Array)
:用方括号 [] 困绕,包含多个值。
JSON 对象示例:
{ "name": "张三", "age": 25, "isStudent": true }
复制代码
JSON 数组示例:
{ "subjects": ["Math", "Science", "History"] }
复制代码
2.
数据类型
JSON 支持以下几种数据类型:
字符串(String)
:必须用双引号 "" 括起来。
数字(Number)
:整数或浮点数,不必要引号。
布尔值(Boolean)
:true 或 false,不必要引号。
数组(Array)
:方括号 [] 困绕,内里可以是恣意类型的数据。
对象(Object)
:花括号 {} 困绕,内里是键值对。
空值(null)
:表现空值,不必要引号。
示例:
{ "name": "张三", "age": 25, "isStudent": true,
"grades": [85, 90, 95], "address": { "city": "北京", "postalCode": "100000" },
"graduationYear": null }
复制代码
3.
语法规则
双引号
:全部的键名(key)和字符串类型的值都必须使用双引号 "",而不能使用单引号 '。
键值对
:每对键和值之间用冒号 : 分隔。
逗号分隔
:多个键值对之间、数组元素之间必须用逗号 , 分隔,但最后一个元素后面不能有逗号。
空格
:可以在 JSON 字符串中添加空格或缩进以进步可读性,这对 JSON 解析没有影响。
示例:
{ "name": "张三", "age": 25, "isStudent": true,
"subjects": ["Math", "Science", "History"] }
复制代码
4.
嵌套结构
JSON 支持对象和数组的嵌套,这使得它可以或许表达复杂的结构。
示例:
{ "name": "张三", "age": 25,
"dog": { "name": "小花", "age": 3 },
"friends": [ { "name": "李四", "age": 24 }, { "name": "王五", "age": 26 } ]
}
复制代码
在这个例子中,dog 是一个嵌套的对象,而 friends 是一个包含多个对象的数组。
将JSON串转为对象以及把对象转为JSON串的例子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
// 定义一个符合JSON格式的字符串
var personStr = '{ "name": "张三", "age": 10,
"dog": { "dname": "小花" }, "loveSingers": ["张小明", "王小东", "李小黑"],
"friends": [{"fname": "李四"}, {"fname": "张三"}] }';
// 通过JSON.parse()可以把一个JSON字符串转换为一个对象
var person = JSON.parse(personStr);
// console.log(personStr);
// console.log(person);
console.log(person.name);
console.log(person.age);
console.log(person.dog.dname);
console.log(person.loveSingers[0]);
console.log(person.friends[0].fname);
// 通过JSON.stringify() 将一个对象转换为JSON串
var personStr2 = JSON.stringify(person);
</script>
</head>
<body>
</body>
</html>
复制代码
JSON在服务器端的使用
1.
将对象转换为 JSON 字符串
这个过程称为
序列化
(Serialization),它将 Java 对象转换为 JSON 字符串,以便可以通过 HTTP 传输大概存储到数据库中。
焦点步骤:
使用 ObjectMapper 类,它是 Jackson 提供的一个焦点工具类,专门用于处置惩罚 JSON 数据。(必要手动导包)详细导包教程:IDEA2020 手动安装jackson (导包通法)_jackson如何引入idea-CSDN博客
下载包的地址:
下载后搜刮Jackson
https://mvnrepository.com/
调用 writeValueAsString(Object) 方法,将 Java 对象转换为 JSON 字符串。
public static void ObjectToString() throws JsonProcessingException {
// 创建对象
Dog dog = new Dog("招财");
Person person = new Person("张三", 10, dog);
// 将对象转换为 JSON 字符串
ObjectMapper objectMapper = new ObjectMapper();
String personStr = objectMapper.writeValueAsString(person);
// 输出 JSON 字符串
System.out.println(personStr);
}
复制代码
输出:
{
"name": "张三",
"age": 10,
"dog": {
"name": "招财"
}
}
复制代码
2.
将 JSON 字符串转换为 Java 对象
这个过程称为
反序列化
(Deserialization),它将 JSON 字符串转换为 Java 对象,以便在后端进行进一步的业务逻辑处置惩罚。
焦点步骤:
使用 ObjectMapper 类。
调用 readValue(String, Class<T>) 方法,将 JSON 字符串转换为指定类型的 Java 对象。
public static void JsonToEObject() throws JsonProcessingException {
// JSON 字符串
String personStr = "{"name":"张三","age":10,"dog":{"name":"招财"}}";
// 将 JSON 字符串转换为对象
ObjectMapper objectMapper = new ObjectMapper();
Person person = objectMapper.readValue(personStr, Person.class);
// 输出对象
System.out.println(person);
}
复制代码
调式时的控制台:
3.
总结:如何在服务器端进行 JSON 和对象之间的转换
对象转换为 JSON 字符串(序列化)
用途
:当你必要将对象通过网络传输或存储为文本(如数据库中)时,通常将 Java 对象转换为 JSON 字符串。
步骤
:
创建一个 Java 对象。
使用
ObjectMapper.writeValueAsString() 方法将对象转换为 JSON 字符串。
常见场景
:
将后端生成的对象通过 HTTP 相应发送到前端。
将对象持久化为 JSON 格式存储。
JSON 字符串转换为对象(反序列化)
用途
:当你从外部汲取到 JSON 数据(好比从前端汲取到哀求数据,或从数据库中读取 JSON 字符串)时,你通常必要将 JSON 字符串转换为 Java 对象进行处置惩罚。
步骤
:
获取 JSON 字符串(从 HTTP 哀求、数据库等)。
使用 ObjectMapper.readValue() 方法将 JSON 字符串转换为 Java 对象。
常见场景
:
从前端汲取 JSON 哀求体,将其转换为后端的业务对象。
从数据库中读取存储的 JSON 数据,将其解析为对象用于处置惩罚。
JSON和Map/List/Array之间的转换:
1.
JSON 和 Map 之间的转换
Map
是一种键值对的数据结构,适合与 JSON 对象的格式进行转换,因为 JSON 对象也是键值对的情势。
在 Jackson 中,可以轻松地将 JSON 字符串转换为 Map<String, Object>,大概将 Map 转换为 JSON 字符串。
1.1
将 JSON 转换为 Map
使用 ObjectMapper 的 readValue() 方法将 JSON 字符串转换为 Map<String, Object>。
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
public class JsonToMapExample {
public static void main(String[] args) throws Exception {
String jsonStr = "{"name":"张三", "age":30, "dog":{"name":"小花"}}";
// 创建 ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
// 将 JSON 转换为 Map
Map<String, Object> resultMap = objectMapper.readValue(jsonStr, Map.class);
// 输出 Map 内容
System.out.println(resultMap);
}
}
复制代码
1.2
将 Map 转换为 JSON
public static void MapToJson() throws JsonProcessingException {
Map data = new HashMap();
data.put("a","value");
data.put("b","value");
ObjectMapper objectMapper = new ObjectMapper();
String s = objectMapper.writeValueAsString(data);
System.out.println(s);
}
复制代码
2.
JSON 和 List 之间的转换
List
是一种有序的集合,适合与 JSON 数组进行相互转换。
在 Jackson 中,List 和 JSON 数组之间的转换也是通过 ObjectMapper 实现的。
2.1
将 JSON 数组转换为 List
JSON 数组可以直接转换为 List,可以是 List<String>、List<Integer> 或 List<Map<String, Object>> 等。
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
public class JsonToListExample {
public static void main(String[] args) throws Exception {
String jsonArrayStr = "["张三", "李四", "王五"]";
// 创建 ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
// 将 JSON 数组转换为 List
List<String> resultList = objectMapper.readValue(jsonArrayStr, new TypeReference<List<String>>() {});
// 输出 List 内容
System.out.println(resultList);
}
}
复制代码
2.2
将 List 转换为 JSON 数组
使用 writeValueAsString() 方法可以将 List 转换为 JSON 数组。
public static void ListToJson() throws JsonProcessingException {
// List<String> data1 = new ArrayList<String>();
// data1.add("a");
// data1.add("b");
// data1.add("c");
//
// String [] data2 = {"a","b","c"};
Dog dog = new Dog("招财");
Person person = new Person("张三",10,dog);
List<Person> data = new ArrayList<Person>();
data.add(person);
ObjectMapper objectMapper = new ObjectMapper();
String s = objectMapper.writeValueAsString(data);
System.out.println(s);
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4