Java Spring Boot中能否像JavaScript一样无需生成JSONObject直接操作JSON类型?
能否在Spring Boot中无需实例化JSONObject直接操作JSON
答案是完全可以,Spring Boot生态提供了多种开箱即用的方案,操作体验和JavaScript中直接操作JSON对象非常接近,全程不需要手动创建JSONObject实例。
常用实现方案
- 用Spring Boot默认集成的Jackson JsonNode实现
Spring Boot默认的JSON序列化工具就是Jackson,你可以直接把原始JSON字符串反序列化为JsonNode对象,用类似JS的链式语法直接取值、修改值,不需要提前定义POJO也不需要手动实例化JSONObject。
示例代码:import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import org.springframework.beans.factory.annotation.Autowired; // 直接注入Spring Boot自动初始化的ObjectMapper即可 @Autowired private ObjectMapper objectMapper; public void operateJson() throws Exception { // 原始JSON字符串 String rawJson = "{\"name\":\"张三\",\"age\":25,\"address\":{\"city\":\"北京\",\"district\":\"朝阳区\"}}"; // 直接解析为JsonNode,不需要手动创建JSONObject JsonNode jsonNode = objectMapper.readTree(rawJson); // 取值逻辑和JS几乎一致 String name = jsonNode.get("name").asText(); Integer age = jsonNode.get("age").asInt(); String city = jsonNode.get("address").get("city").asText(); // 修改值也非常简单,强转为ObjectNode子类即可操作 ((ObjectNode) jsonNode).put("name", "李四"); ((ObjectNode) jsonNode.with("address")).put("city", "上海"); } - 接口层直接接收JSON参数,无需手动解析
Controller层不需要定义POJO也不需要自己调用解析方法生成JSONObject,直接用JsonNode或者Map接收入参,Spring MVC会自动完成JSON解析:
示例代码:import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import com.fasterxml.jackson.databind.JsonNode; import java.util.Map; @RestController public class TestController { // 直接用JsonNode接收请求JSON @PostMapping("/test/json") public String testJson(@RequestBody JsonNode jsonNode) { return jsonNode.get("name").asText(); } // 用Map接收的话操作逻辑和JS对象完全一致 @PostMapping("/test/map") public String testMap(@RequestBody Map<String, Object> jsonMap) { String name = (String) jsonMap.get("name"); Map<String, Object> address = (Map<String, Object>) jsonMap.get("address"); String city = (String) address.get("city"); return city; } } - Gson可选方案
如果习惯用Gson工具栈,引入Gson依赖后直接调用fromJson方法即可把原始JSON字符串转成JsonObject,不需要手动调用构造方法创建实例:
示例代码:import com.google.gson.Gson; import com.google.gson.JsonObject; public void operateGson() { String rawJson = "{\"name\":\"张三\",\"age\":25}"; Gson gson = new Gson(); JsonObject jsonObject = gson.fromJson(rawJson, JsonObject.class); String name = jsonObject.get("name").getAsString(); }
以上所有方案都不需要手动实例化任何JSONObject对象,工具/框架会自动完成解析封装。如果是Spring Boot原生场景优先用Jackson的
JsonNode/ObjectNode,兼容性和性能最优。
内容的提问来源于stack exchange,提问作者Oya
相关产品推荐
相关产品推荐

