Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中向json节点添加新的键值_Java_Json - Fatal编程技术网

在java中向json节点添加新的键值

在java中向json节点添加新的键值,java,json,Java,Json,我有一个JSON文件: { "id":1, "name":"abc", "addressDetails": { "City":"NewYork" } } 我想在节点“addressDetails”中再添加一个键值(“pinCode”:“414141”) 我尝试使用: ObjectMapper mapper = new ObjectMapper(); JsonNode root = mapper.readTree(new File("D:

我有一个JSON文件:

{
   "id":1,
   "name":"abc",
   "addressDetails":
      {
        "City":"NewYork"
      }
}
我想在节点“addressDetails”中再添加一个键值(“pinCode”:“414141”)

我尝试使用:

ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(new File("D://test.json"));
ObjectNode node = mapper.createObjectNode();
node.with("addressDetails").put("pinCode", "414141"); 
但是它没有被添加,我有什么办法可以这样做吗?

你可以试试

您应该修改文件路径

ObjectMapper mapper = new ObjectMapper();
ObjectNode nodes = mapper.readValue(new File("D:\\test.txt"), 
ObjectNode.class);
nodes.with("addressDetails").put("pinCode", "414141");
mapper.writer().writeValue(new File("D:\\test.txt"), nodes);

代码的问题在于将值添加到一个新的JsonObject(
节点
),而不是您读入的那个(
根节点
)。因此,基本上,您必须将其添加到
根目录中。但要做到这一点,您必须将其强制转换为
ObjectNode
,因为
JsonNode
不提供任何添加到节点的方法

因此,请尝试以下方法:

ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(new File("D://test.json"));
ObjectNode node = (ObjectNode) root;
node.with("addressDetails").put("pinCode", "414141");
mapper.writer().writeValue(new File("D:\\test.txt"), node);

当然您可以写入任何文件扩展名,例如“D:\\test.log”@sForSujit yes,它在更改后给出FilenotfoundExceptionextension@Vinod您需要使用一个exists@Vinod你丢失了{mapper.writer().writeValue(新文件(“D:\\test.txt”),nodes);}@linnan嘿,酷,我的错误,我没有覆盖它。谢谢你,伙计