四大常用JSON解析器完成对象转换的案例

1. JSON基本格式:

博客中很多优秀的介绍JSON格式下面博客的介绍是我认为是比较完整地:

传送门: json基本数据格式


2. JSON解析器介绍:

JSON解析器通常包含两个主要功能:解析和生成。解析功能将JSON字符串解析为内存中的数据结构,通常是对象、数组或键值对的集合。生成功能则将内存中的数据结构转换为JSON字符串。

许多编程语言都提供了内置的JSON解析器和生成器,可以轻松地处理JSON数据。例如,JavaScript中的JSON.parse()函数用于解析JSON字符串,将其转换为JavaScript对象;JSON.stringify()函数用于将JavaScript对象转换为JSON字符串。其他编程语言如Python、Java、C#等也提供了类似的功能。

使用JSON解析器,可以方便地在不同的应用程序之间传递和处理数据,特别适用于Web应用程序和客户端-服务器通信。无论是从网络接收JSON数据,还是将数据发送到远程服务器,JSON解析器都是必不可少的工具。


3. 常用JSON的解析器:

1. Jackson:

Jackson是一个非常流行的JSON处理库,提供了高性能和灵活的JSON解析和生成功能。它可以将JSON数据映射到Java对象中,并将Java对象转换为JSON格式。Jackson还支持注解,可以用于进一步控制JSON与Java对象之间的映射关系。

首先,您需要在您的Java项目中添加Jackson库的依赖。如果使用Maven进行项目管理,
可以在pom.xml文件中添加以下依赖项:
<dependency>
    <groupId>com.fasterxml.jackson.coregroupId>
    <artifactId>jackson-databindartifactId>
    <version>2.12.3version>
dependency>
接下来,假设您有一个JSON字符串如下:
{
  "name": "John Doe",
  "age": 30,
  "email": "[email protected]"
}
现在,让我们看一下如何使用Jackson将该JSON字符串解析为Java对象,并将Java对象转换回JSON字符串:
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonExample {
    public static void main(String[] args) {
        String json = "{\"name\":\"John Doe\",\"age\":30,\"email\":\"[email protected]\"}";

        try {
            // 创建ObjectMapper对象
            ObjectMapper objectMapper = new ObjectMapper();

            // 解析JSON字符串为Java对象
            Person person = objectMapper.readValue(json, Person.class);
            System.out.println("Name: " + person.getName());
            System.out.println("Age: " + person.getAge());
            System.out.println("Email: " + person.getEmail());

            // 将Java对象转换为JSON字符串
            String jsonString = objectMapper.writeValueAsString(person);
            System.out.println("JSON: " + jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Person {
    private String name;
    private int age;
    private String email;

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

    // getters 和 setters

    // name getter 和 setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // age getter 和 setter
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // email getter 和 setter
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

在上面的示例中,我们首先创建了一个ObjectMapper对象,它是Jackson库中用于解析和生成JSON的主要类。
然后,我们使用readValue()方法将JSON字符串解析为Person类的对象,
并使用writeValueAsString()方法将Person对象转换回JSON字符串。

请注意,Person类必须具有无参数的构造函数,并为每个属性提供相应的getter和setter方法,
以便Jackson可以正确地进行对象与JSON之间的映射。

以上是一个简单的示例,使用Jackson库进行JSON解析和生成的基本功能。
根据需要扩展和修改该示例以满足具体的业务逻辑。

2. Gson:

Gson是Google提供的一个简单而强大的JSON解析库。它可以将JSON字符串解析为Java对象,并将Java对象转换为JSON字符串。Gson提供了许多便捷的API和注解,用于配置解析和生成过程中的细节。

首先,您需要在您的Java项目中添加Gson库的依赖。如果使用Maven进行项目管理,
可以在pom.xml文件中添加以下依赖项:
<dependency>
    <groupId>com.google.code.gsongroupId>
    <artifactId>gsonartifactId>
    <version>2.8.9version>
dependency>
接下来,假设您有一个JSON字符串如下:
{
  "name": "John Doe",
  "age": 30,
  "email": "[email protected]"
}

现在,让我们看一下如何使用Gson将该JSON字符串解析为Java对象,并将Java对象转换回JSON字符串:
import com.google.gson.Gson;

public class JsonExample {
    public static void main(String[] args) {
        String json = "{\"name\":\"John Doe\",\"age\":30,\"email\":\"[email protected]\"}";

        try {
            // 创建Gson对象
            Gson gson = new Gson();

            // 解析JSON字符串为Java对象
            Person person = gson.fromJson(json, Person.class);
            System.out.println("Name: " + person.getName());
            System.out.println("Age: " + person.getAge());
            System.out.println("Email: " + person.getEmail());

            // 将Java对象转换为JSON字符串
            String jsonString = gson.toJson(person);
            System.out.println("JSON: " + jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Person {
    private String name;
    private int age;
    private String email;

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

    // getters 和 setters

    // name getter 和 setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // age getter 和 setter
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // email getter 和 setter
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

在上面的示例中,我们首先创建了一个Gson对象,它是Gson库中用于解析和生成JSON的主要类。
然后,我们使用fromJson()方法将JSON字符串解析为Person类的对象,并使用toJson()方法
将Person对象转换回JSON字符串。

3. JSON-B:

JSON-B(JSON Binding)是Java EE 8的一部分,它提供了标准的JSON解析和生成API。JSON-B提供了注解和配置选项,用于控制JSON与Java对象之间的映射。JSON-B可以与Java的标准注解和JAX-RS(Java API for RESTful Web Services)框架无缝集成。

4. org.json:

org.json是Java提供的一个简单的JSON解析器和生成器。它包含在Java标准库中,并提供了解析和生成JSON数据的基本功能。虽然功能相对较简单,但对于简单的JSON操作,它是一个轻量级和易于使用的选择。

在Java标准库中的org.json包中,可以使用JSONObject和JSONArray类来解析和生成JSON数据。
以下是一个使用org.json实现JSON解析和生成的示例代码:
import org.json.JSONArray;
import org.json.JSONObject;

public class JsonExample {
    public static void main(String[] args) {
        String json = "{\"name\":\"John Doe\",\"age\":30,\"email\":\"[email protected]\"}";

        try {
            // 解析JSON字符串
            JSONObject jsonObject = new JSONObject(json);
            String name = jsonObject.getString("name");
            int age = jsonObject.getInt("age");
            String email = jsonObject.getString("email");

            System.out.println("Name: " + name);
            System.out.println("Age: " + age);
            System.out.println("Email: " + email);

            // 生成JSON字符串
            JSONObject newJsonObject = new JSONObject();
            newJsonObject.put("name", "Jane Smith");
            newJsonObject.put("age", 25);
            newJsonObject.put("email", "[email protected]");

            String newJsonString = newJsonObject.toString();
            System.out.println("JSON: " + newJsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


这是一个简单的示例,展示了使用org.json进行JSON解析和生成的基本功能。
尽管功能相对简单,但对于简单的JSON操作,org.json是一个轻量级且易于使用的选择。
如果需求更加复杂,可能需要考虑使用其他功能更强大的JSON库,如Jackson或Gson。

总结

  • jakson
    • 1.创建ObjectMapper对象
    • 2.调用ObjectMapper的readValue方法实现JSON字符串为Java对象
    • 3.调用ObjectMapper的writeValueAsString方法实现Java对象转换为JSON字符串
  • Gson
    • 1.创建Gson 对象
    • 2.调用gson的fromJson方法实现JSON字符串为Java对象
    • 3.调用gson的toJson方法实现Java对象转换为JSON字符串
  • org.json
    Java提供的一个简单的JSON解析器和生成器。它包含在Java标准库中,并提供了解析和生成JSON数据的基本功能。只能解析和生成JSON字符串,不能进行java对象之间的转换。

每个解析器都有其特点和适用场景。可以根据项目需求和个人偏好选择适合的JSON解析器。


springboot整合JSON补充

在springboot框架中不需要手动去解析生成以及和对象和json的转化。springboot通过注解的方式帮我们整合好了。

下面通过在打了@RestController注解的类上添加@ResponseBody注解,在具体的方法上使用@ResponseBody注解,来显式地指示Spring将返回的Java对象自动转换为JSON。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
//@ResponseBody
public class MyController {

    @GetMapping("/example")
    @ResponseBody
    public MyObject getExample() {
        // 返回的MyObject会自动转换为JSON
        return new MyObject();
    }
}

下面是通过在方法参数上使用@RequestBody注解,Spring Boot会自动将接收到的JSON数据转换为Person对象,并将其作为方法的参数传入。

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @PostMapping("/person")
    public Person createPerson(@RequestBody Person person) {
        // 在这里可以对person对象进行业务逻辑处理
        return person;
    }
}

你可能感兴趣的:(javaweb,json,开发语言,java)