1

我正在尝试向路径添加一个索引值:

$.data.library.category[2].bookjayway jsonpath在跟随 Json 中使用,

 "data":{
    "library":{
    "class":"CRED",
    "category":[{
                "book":"java 2.0"
            },
            {
                "book":"java 3.0"
            }]
    }

但我没有在结果 json 中得到更新的响应。

我的java代码:

Configuration conf = Configuration.defaultConfiguration().addOptions(Option.DEFAULT_PATH_LEAF_TO_NULL).addOptions(Option.SUPPRESS_EXCEPTIONS);  
DocumentContext documentContext = JsonPath.using(conf).parse(sampleJson);
documentContext.set(JsonPath.compile("$.data.library.category[2].book"), "java 3.0");

我也检查过documentContext.add。什么都解决不了。由于数组有 0 和 1 索引,我可以通过 JsonPath 更新那里的值。但它没有第二个索引,所以没有更新。但是我需要根据 jsonpath 在给定 json 的最后一个中插入新索引。

4

1 回答 1

1

路径$.data.library.category[2].book表示您要更新3-rd数组中的元素。但是还没有3-rd元素。您需要先创建它。$.data.library.category您可以使用路径将新元素添加到数组中。通过提供一个Map对象,您可以定义所有必需的键和值。请参见下面的示例:

import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.Option;

import java.io.File;
import java.util.Collections;

public class JsonPathApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        Configuration conf = Configuration.defaultConfiguration()
                .addOptions(Option.DEFAULT_PATH_LEAF_TO_NULL)
                .addOptions(Option.SUPPRESS_EXCEPTIONS);
        DocumentContext document = JsonPath.using(conf).parse(jsonFile);

        JsonPath pathToArray = JsonPath.compile("$.data.library.category");

        document.add(pathToArray, Collections.singletonMap("book", "java 3.1"));
        document.add(pathToArray, Collections.singletonMap("book", "java 3.2"));

        System.out.println(document.jsonString());
    }
}

上面的代码打印如下JSON

{
   "data":{
      "library":{
         "class":"CRED",
         "category":[
            {
               "book":"java 2.0"
            },
            {
               "book":"java 3.0"
            },
            {
               "book":"java 3.1"
            },
            {
               "book":"java 3.2"
            }
         ]
      }
   }
}
于 2020-06-22T21:52:13.823 回答