gpt4 book ai didi

Java 用字符串值替换 JsonNode

转载 作者:行者123 更新时间:2023-12-02 10:00:45 25 4
gpt4 key购买 nike

我是 Java 菜鸟,正在努力进行类型转换。我有一个如下所示的 JSON 对象:

   [  
{
"A":{
"B":{
"C":"Message",
"D":"FN1"
}
}
}
]

我想将其转换为:

  [  
{
"A":{
"B": "My String Message"
}
}
]

我可以用新的 JSON 节点替换旧的 JSON 节点,但无法用 TextNode 替换它,尝试了多个失败的选项,如下所示:

   JsonNode newNode = new TextNode("My String Message");
ObjectNode nodeObj = (ObjectNode) jsonNode;
nodeObj.removeAll();
nodeObj.set(newNode);

最佳答案

您的代码只是出现了一个小问题。添加新文本条目时,必须提供要与新文本节点关联的键值。所以这一行:

nodeObj.set(newNode);

只需这样:

nodeObj.set("B", newNode);

这是一个完整的示例,它只执行您在问题中显示的内容,合并您提供的代码,仅进行一个小修复:

public static void main(String... args) throws IOException {

// Read in the structure provided from a text file
FileReader f = new FileReader("/tmp/foox.json");
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(f);

// Print the starting structure
System.out.println(rootNode);

// Get the node we want to operate on
ObjectNode jsonNode = (ObjectNode)rootNode.get(0).get("A");

// The OPs code, with just the small change of adding the key value when adding the new String
JsonNode newNode = new TextNode("My String Message");
ObjectNode nodeObj = (ObjectNode) jsonNode;
nodeObj.removeAll();
nodeObj.set("B", newNode);

// Print the resulting structure
System.out.println(rootNode);
}

结果输出:

[{"A":{"B":{"C":"Message","D":"FN1"}}}]
[{"A":{"B":"My String Message"}}]

更新:根据评论中的讨论,要进行您所说明的更改,您必须有权访问与键 A 关联的 ObjectNode。正是这个 ObjectNode 将 B 与包含 C 和 D 的 ObjectNode 关联起来。因为您想要更改 B 关联的值(您希望它与 TextNode 而不是 ObjectNode 关联),您需要访问与 A 关联的 ObjectNode。如果您只有一个指向包含 C 和 D 的 ObjectNode 的指针,你无法做出你想做的改变。

关于Java 用字符串值替换 JsonNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55661698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com