使用Jackson为JSON添加属性

时间:2014-04-24 14:23:13

标签: java json jackson

所以我的jsonStr就是这个

[
    {
        "data": [
            {
                "itemLabel": "Social Media",
                "itemValue": 90
            },
            {
                "itemLabel": "Blogs",
                "itemValue": 30
            },
            {
                "itemLabel": "Text Messaging",
                "itemValue": 60
            },
            {
                "itemLabel": "Email",
                "itemValue": 90
            }
        ]
    }
]

我想在data数组之后添加一个属性,如此

[
    {
        "data": [
            {
                "itemLabel": "Social Media",
                "itemValue": 90
            },
            {
                "itemLabel": "Blogs",
                "itemValue": 30
            },
            {
                "itemLabel": "Text Messaging",
                "itemValue": 60
            },
            {
                "itemLabel": "Email",
                "itemValue": 90
            }
        ],
        "label": "2007"
    }
]

在这里阅读它说要做类似

的事情
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(jsonStr);
((ObjectNode) jsonNode).put("label", "2007");

String json = mapper.writeValueAsString(jsonNode);

return json;

问题是我一直收到错误

java.lang.ClassCastException: com.fasterxml.jackson.databind.node.ArrayNode cannot be cast to com.fasterxml.jackson.databind.node.ObjectNode

我做错了什么?我目前正在使用Jackson-core 2.2.2

1 个答案:

答案 0 :(得分:8)

您的顶级节点代表一个数组,而不是一个对象。在添加属性之前,您需要更深入一级。

您可以使用以下内容:

JsonNode elem0 = ((ArrayNode) jsonNode).get(0);
((ObjectNode) elem0).put("label", "2007");

当然,如果结构看起来不像您期望的那样,您可能需要添加一些错误处理。