You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:36:05