一、實體轉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-tw/n/133456.html