一、实体转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; } }