从Java实体转JSON:探究转换方式与实践应用(Java实体和JSON之间的相互转换)

一、实体转JSONObject

实体是Java中常见的数据模型,而JSONObject是JSON的一种对象表示方式。将实体转换成JSONObject是一种非常常见的操作。下面将介绍三种不同的实现方式。

1. 使用Jackson库实现实体转JSONObject

    ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
    JSONObject json = new JSONObject(ow.writeValueAsString(obj));

使用Jackson库的好处是可以自定义一些设置。

例如:ifSerializationInclusion(JsonInclude.Include.NON_NULL)忽略值为空的属性;ifFailOnUnknownProperties(false)忽略未知属性。

2. 使用GSON库实现实体转JSONObject

    Gson gson = new Gson();
    JSONObject json = new JSONObject(gson.toJson(obj));

使用GSON库的好处是既能读取JSON数据,也能写入JSON数据。

3. 使用JSONObject实现实体转JSONObject

    JSONObject jsonObject = (JSONObject) JSON.toJSON(obj);

使用JSONObject的好处是无需导入第三方库,但是需要注意的是,实体类必须有get和set方法。

二、实体类转JSON字符串

实体转换成JSON字符串是一种更加常见的操作。下面将介绍三种不同的实现方式。

1. 使用Jackson库实现实体类转JSON字符串

    ObjectMapper objectMapper = new ObjectMapper();
    String jsonStr = objectMapper.writeValueAsString(obj);

使用Jackson库的好处是可以输出格式化的JSON字符串。

2. 使用GSON库实现实体类转JSON字符串

    Gson gson = new Gson();
    String jsonStr = gson.toJson(obj);

使用GSON库的好处是可以自定义输出格式。

3. 使用JSONObject实现实体类转JSON字符串

    String jsonStr = JSON.toJSONString(obj);

该方式只需要导入alibaba fastjson库即可,也可以自定义输出格式。

三、实际应用场景

实体转JSON的应用非常广泛,下面以Spring Boot的接口返回结果为例,演示在实践中如何应用。

在Spring Boot中,我们通常需要将返回的结果转换成JSON字符串返回给前端。如下面的代码:

@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") Long id) {
    User user = userService.getUserById(id);
    return JSON.toJSONString(user);
}

同时,我们也可以将返回结果封装成一个固定的数据结构,如下所示:

public class Result {
    private Integer code;
    private String message;
    private T data;
    //...  省略各种get和set方法
}

@GetMapping("/user/{id}")
public Result getUser(@PathVariable("id") Long id) {
    User user = userService.getUserById(id);
    return new Result(200, "查询成功", user);
}

以上代码使用fastjson库将结果封装成JSON格式返回给前端,并且给予了特定的响应码和提示信息

四、小结

本文从实现的角度出发,详细阐述了Java实体转JSON的三种实现方式,并在实际场景中展示了优秀的应用案例。在实际应用中,根据实际情况选取适合的实现方式能够使你的代码更加规范和高效。

示例代码:

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import org.json.JSONObject;
import com.google.gson.Gson;

public class User {
    private Long id;
    private String name;
    private Integer age;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/user/{id}")
    public String getUser(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonStr = objectMapper.writeValueAsString(user);
        return jsonStr;
    }

    @GetMapping("/user/gson/{id}")
    public String getUserByGson(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        Gson gson = new Gson();
        String jsonStr = gson.toJson(user);
        return jsonStr;
    }

    @GetMapping("/user/fastjson/{id}")
    public String getUserByFastJson(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        String jsonStr = JSON.toJSONString(user);
        return jsonStr;
    }

    public class Result {
        private Integer code;
        private String message;
        private T data;
        //...  省略各种get和set方法
    }

    @GetMapping("/user/result/{id}")
    public Result getUserByResult(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        return new Result(200, "查询成功", user);
    }

    @GetMapping("/user/jsonobject/{id}")
    public JSONObject getUserByJSONObject(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
        JSONObject json = new JSONObject(ow.writeValueAsString(user));
        return json;
    }

    @GetMapping("/user/gsonobject/{id}")
    public JSONObject getUserByGSONJSONObject(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        Gson gson = new Gson();
        JSONObject json = new JSONObject(gson.toJson(user));
        return json;
    }

    @GetMapping("/user/jsonobjectEx/{id}")
    public JSONObject getUserByJSONObjectEx(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        JSONObject jsonObject = (JSONObject) JSON.toJSON(user);
        return jsonObject;
    }

}

Published by

风君子

独自遨游何稽首 揭天掀地慰生平