一、實體轉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;
}
}原創文章,作者:BARM,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/133456.html
微信掃一掃
支付寶掃一掃