JSON串

JSON在客户端的使用

JSON 字符串的格式是基于键值对的数据结构,用于表示结构化数据。它遵循严格的语法规则,常用于前后端数据交互。

1. 基本结构

  • JSON 数据结构由两种主要元素构成:
    • 对象(Object) :用花括号 {} 包围,包含键值对。
    • 数组(Array) :用方括号 [] 包围,包含多个值。
JSON 对象示例:
javascript 复制代码
{ "name": "张三", "age": 25, "isStudent": true }
JSON 数组示例:
javascript 复制代码
{ "subjects": ["Math", "Science", "History"] }

2. 数据类型

JSON 支持以下几种数据类型:

  • 字符串(String) :必须用双引号 "" 括起来。
  • 数字(Number):整数或浮点数,不需要引号。
  • 布尔值(Boolean)truefalse,不需要引号。
  • 数组(Array) :方括号 [] 包围,里面可以是任意类型的数据。
  • 对象(Object) :花括号 {} 包围,里面是键值对。
  • 空值(null):表示空值,不需要引号。
示例:
javascript 复制代码
{ "name": "张三", "age": 25, "isStudent": true,
 "grades": [85, 90, 95], "address": { "city": "北京", "postalCode": "100000" }, 
"graduationYear": null }

3. 语法规则

  • 双引号 :所有的键名(key)和字符串类型的值都必须使用双引号 "",而不能使用单引号 '
  • 键值对 :每对键和值之间用冒号 : 分隔。
  • 逗号分隔 :多个键值对之间、数组元素之间必须用逗号 , 分隔,但最后一个元素后面不能有逗号。
  • 空格:可以在 JSON 字符串中添加空格或缩进以提高可读性,这对 JSON 解析没有影响。
示例:
javascript 复制代码
{ "name": "张三", "age": 25, "isStudent": true, 
"subjects": ["Math", "Science", "History"] }

4. 嵌套结构

JSON 支持对象和数组的嵌套,这使得它能够表达复杂的结构。

示例:
javascript 复制代码
{ "name": "张三", "age": 25, 
"dog": { "name": "小花", "age": 3 }, 
"friends": [ { "name": "李四", "age": 24 }, { "name": "王五", "age": 26 } ] 
}

在这个例子中,dog 是一个嵌套的对象,而 friends 是一个包含多个对象的数组。

将JSON串转为对象以及把对象转为JSON串的例子

html 复制代码
<!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 传输或者存储到数据库中。

核心步骤:

下载包的地址:

下载后搜索Jacksonhttps://mvnrepository.com/

  • 调用 writeValueAsString(Object) 方法,将 Java 对象转换为 JSON 字符串。
java 复制代码
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);
}

输出:

java 复制代码
{
  "name": "张三",
  "age": 10,
  "dog": {
    "name": "招财"
  }
}

2. 将 JSON 字符串转换为 Java 对象

这个过程称为 反序列化(Deserialization),它将 JSON 字符串转换为 Java 对象,以便在后端进行进一步的业务逻辑处理。

核心步骤:
  • 使用 ObjectMapper 类。
  • 调用 readValue(String, Class<T>) 方法,将 JSON 字符串转换为指定类型的 Java 对象。
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 字符串。
  • 步骤
    1. 创建一个 Java 对象。
    2. 使用 ObjectMapper.writeValueAsString() 方法将对象转换为 JSON 字符串。
  • 常见场景
    • 将后端生成的对象通过 HTTP 响应发送到前端。
    • 将对象持久化为 JSON 格式存储。
JSON 字符串转换为对象(反序列化)
  • 用途:当你从外部接收到 JSON 数据(比如从前端接收到请求数据,或从数据库中读取 JSON 字符串)时,你通常需要将 JSON 字符串转换为 Java 对象进行处理。

  • 步骤

    1. 获取 JSON 字符串(从 HTTP 请求、数据库等)。
    2. 使用 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

使用 ObjectMapperreadValue() 方法将 JSON 字符串转换为 Map<String, Object>

java 复制代码
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

java 复制代码
 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>> 等。

java 复制代码
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 数组。

java 复制代码
   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);
    }
相关推荐
乔峰不是张无忌3303 分钟前
【HTML】动态闪烁圣诞树+雪花+音效
前端·javascript·html·圣诞树
鸿蒙自习室10 分钟前
鸿蒙UI开发——组件滤镜效果
开发语言·前端·javascript
星河梦瑾10 分钟前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富14 分钟前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
love静思冥想15 分钟前
JMeter 使用详解
java·jmeter
言、雲18 分钟前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
TT哇25 分钟前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
汪洪墩1 小时前
【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换
开发语言·javascript·python·ecmascript·webgl·cesium
Yvemil71 小时前
《开启微服务之旅:Spring Boot 从入门到实践》(三)
java
Anna。。1 小时前
Java入门2-idea 第五章:IO流(java.io包中)
java·开发语言·intellij-idea