授课语音

学习JSON语法及其与Java对象的转换方法

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。它通常用于客户端与服务器之间交换数据。Java提供了多种工具将JSON字符串与Java对象进行转换,本节将介绍JSON的基本语法及其与Java对象转换的方法。


1. JSON的基本语法

JSON格式基于两个结构:

  • 对象(Object):由键值对组成,键必须是字符串,值可以是任何类型的数据。对象用大括号 {} 包围。
  • 数组(Array):由多个值组成的有序集合,值之间用逗号 , 隔开,数组用方括号 [] 包围。

1.1 JSON对象

JSON对象是由键值对组成的,每个键都映射到一个值。键是字符串,值可以是数字、字符串、布尔值、数组、对象或 null

JSON对象示例:

{
  "name": "John",
  "age": 30,
  "isStudent": false
}
  • name:键,值为字符串 "John"
  • age:键,值为数字 30
  • isStudent:键,值为布尔值 false

1.2 JSON数组

JSON数组是值的有序集合,每个元素之间用逗号隔开。数组中的元素可以是任何类型的数据。

JSON数组示例:

[
  "apple",
  "banana",
  "cherry"
]

这个数组包含了三个字符串元素。

1.3 嵌套对象与数组

JSON支持嵌套对象和数组。一个对象可以包含另一个对象,或者包含一个数组。数组中的元素也可以是对象或数组。

示例:

{
  "name": "John",
  "address": {
    "street": "123 Main St",
    "city": "New York"
  },
  "phoneNumbers": [
    {"type": "home", "number": "123-456-7890"},
    {"type": "work", "number": "987-654-3210"}
  ]
}
  • address 是一个嵌套的对象,包含 streetcity
  • phoneNumbers 是一个数组,包含两个对象,每个对象有 typenumber

2. Java与JSON的转换方法

在Java中,我们通常使用第三方库如 JacksonGson 来处理JSON与Java对象之间的转换。下面将分别介绍如何使用这两个库进行转换。


2.1 使用Jackson进行JSON与Java对象的转换

Jackson是一个高效的JSON处理库,支持将JSON字符串转换为Java对象,也支持将Java对象转换为JSON字符串。

2.1.1 JSON转Java对象

import com.fasterxml.jackson.databind.ObjectMapper;

class User {
    public String name;
    public int age;

    public User() {}  // 必须有无参构造函数

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class JacksonExample {
    public static void main(String[] args) {
        try {
            String json = "{\"name\":\"John\", \"age\":30}";
            ObjectMapper objectMapper = new ObjectMapper();
            
            // 将JSON字符串转换为Java对象
            User user = objectMapper.readValue(json, User.class);
            System.out.println("Name: " + user.name + ", Age: " + user.age);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

解释:

  • ObjectMapper 是Jackson的核心类,用于处理JSON的读写。
  • readValue 方法将JSON字符串转换为 User 类的实例。

2.1.2 Java对象转JSON

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonExample {
    public static void main(String[] args) {
        try {
            User user = new User("John", 30);
            ObjectMapper objectMapper = new ObjectMapper();

            // 将Java对象转换为JSON字符串
            String json = objectMapper.writeValueAsString(user);
            System.out.println(json);  // 输出:{"name":"John","age":30}
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

解释:

  • writeValueAsString 方法将 User 类的对象转换为JSON字符串。

2.2 使用Gson进行JSON与Java对象的转换

Gson是Google的JSON库,它提供了类似的功能,用于处理JSON和Java对象之间的转换。

2.2.1 JSON转Java对象

import com.google.gson.Gson;

class User {
    public String name;
    public int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class GsonExample {
    public static void main(String[] args) {
        String json = "{\"name\":\"John\", \"age\":30}";
        Gson gson = new Gson();
        
        // 将JSON字符串转换为Java对象
        User user = gson.fromJson(json, User.class);
        System.out.println("Name: " + user.name + ", Age: " + user.age);
    }
}

解释:

  • fromJson 方法将JSON字符串转换为 User 类的实例。

2.2.2 Java对象转JSON

import com.google.gson.Gson;

public class GsonExample {
    public static void main(String[] args) {
        User user = new User("John", 30);
        Gson gson = new Gson();

        // 将Java对象转换为JSON字符串
        String json = gson.toJson(user);
        System.out.println(json);  // 输出:{"name":"John","age":30}
    }
}

解释:

  • toJson 方法将 User 类的对象转换为JSON字符串。

3. 总结

  • JSON 是一种轻量级的数据交换格式,易于人类和机器处理。
  • JSON语法 基本包括对象和数组,可以包含多层嵌套。
  • Java与JSON的转换:使用 JacksonGson 库,可以轻松地将JSON字符串与Java对象进行相互转换。
  • JacksonGson 都提供了简洁的API进行转换,ObjectMapperGson 类分别是其核心类。

通过掌握JSON的基本语法和使用Jackson、Gson进行转换的方法,开发者可以在Web开发中高效地处理数据传输。

去1:1私密咨询

系列课程: