首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么TextNode没有update值(Set)方法?

为什么TextNode没有update值(Set)方法?
EN

Stack Overflow用户
提问于 2014-10-14 03:47:47
回答 1查看 3K关注 0票数 1

我想使用杰克逊修改TextNode的值。

但是API中没有这样的方法。

然后我试着用反射来克服这个限制:

代码语言:javascript
复制
public class TestModify {

    public static void main(final String[] args) throws JsonProcessingException, IOException,
            NoSuchFieldException, SecurityException, IllegalArgumentException,
            IllegalAccessException {
        final String json = "[{},\"123123\",\"12456\"]";
        final ObjectMapper mapper = new ObjectMapper();
        final JsonNode node = mapper.readTree(json);
        final Iterator<JsonNode> nodes = node.elements();
        while (nodes.hasNext()) {
            final JsonNode n = nodes.next();
            if (n instanceof TextNode) {
                final Field f = TextNode.class.getDeclaredField("_value");
                f.setAccessible(true);
                f.set(n, "updated");
            }
            System.out.println(n.getClass());
        }
        System.out.println(node);
    }
}  

代码似乎工作得很好,println显示:

代码语言:javascript
复制
class com.fasterxml.jackson.databind.node.ObjectNode
class com.fasterxml.jackson.databind.node.TextNode
class com.fasterxml.jackson.databind.node.TextNode
[{},"updated","updated"]   

那么,为什么原始API中没有更新方法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-14 04:18:52

这一定是设计上的决定。TextNode表示一个JSON字符串。就像一个Java String一样,他们很可能认为它应该是不可变的。

您可以简单地用新实例替换现有的TextNode实例。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26352325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档