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

如何在Jackson中将TextNode类型的数组转换为ArrayNode

解决方案

核心逻辑:这类场景属于JSON嵌套序列化场景,即外层JSON的某字段值是另一段序列化后的JSON字符串,Jackson默认只会解析外层结构,将内层序列化字符串识别为TextNode,只需要对该TextNode的文本内容做二次解析即可。

注意:你给出的示例中"[\"b\":12]"是非法JSON结构,JSON数组中不能直接存放键值对,合法的数组结构应为"[{\"b\":12}]",以下示例基于修正后的合法结构编写。

实现步骤

  • 初始化Jackson的ObjectMapper实例(全局复用即可,无需每次操作新建)
  • 解析原始JSON字符串得到根节点
  • 取出目标TextNode字段的文本值
  • 用ObjectMapper二次解析该文本值得到对应类型的JsonNode,判断为数组类型后强转为ArrayNode即可

代码示例

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;

public class JsonParseExample {
    // 全局复用ObjectMapper
    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();

    public static void main(String[] args) throws Exception {
        // 原始JSON字符串,修正了a字段的非法数组结构
        String rawJson = "{\"a\" : \"[{\\\"b\\\":12}]\"}";
        
        // 第一次解析外层JSON
        JsonNode rootNode = OBJECT_MAPPER.readTree(rawJson);
        
        // 取出a字段的TextNode
        JsonNode rawANode = rootNode.get("a");
        if (rawANode.isTextual()) {
            // 二次解析文本内容为JsonNode
            JsonNode parsedANode = OBJECT_MAPPER.readTree(rawANode.asText());
            
            // 校验是否为数组类型,转为ArrayNode
            if (parsedANode.isArray()) {
                ArrayNode arrayNode = (ArrayNode) parsedANode;
                // 这里就可以对ArrayNode做任意操作了
                System.out.println("转换后的ArrayNode内容:" + arrayNode);
                
                // 如果需要把转换后的节点替换回原根节点,可执行以下代码
                ((ObjectNode) rootNode).set("a", arrayNode);
                System.out.println("替换后的完整JSON:" + OBJECT_MAPPER.writeValueAsString(rootNode));
            }
        }
    }
}

运行输出

转换后的ArrayNode内容:[{"b":12}]
替换后的完整JSON:{"a":[{"b":12}]}

内容的提问来源于stack exchange,提问作者blankRK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:00:01