Как получить значение из JSON с помощью JsonPath в Java?

Я хочу получить значение из объекта JSON, используя JsonPath. Может ли кто-нибудь предложить мне подходящие банки, которые мне понадобятся, потому что, насколько мне известно, я получаю это исключение для банок, которые я использую для jsonpath.

package jsonPg;

import java.io.IOException;

import org.json.JSONException;
import org.json.JSONObject;

import com.jayway.jsonpath.JsonPath;

public class ReadJsonPath {

    static String file = "D:\\AutomationSample\\Sample_Json.txt";

    public static void main(String[] args) throws JSONException, IOException {
        JsonReadFile jsonReadFile=new JsonReadFile();
        JSONObject jsonObj=jsonReadFile.parseJSONFile(file);
        String jsonObject=jsonObj.toString();
        String json="";
        System.out.println(jsonObject);
//      Object val = JsonPath.read(jsonObject,"");
        String val1=JsonPath.read(jsonObject," $.payload[*].supplierDataMap[*].COMPANYDETAILS.customFieldList[*].DISPLAYGSID   .value");
        System.out.println(val1);

     }

 }

вот код, который я написал, и ниже приведено исключение, которое выдается во время выполнения

    Exception in thread "main" java.lang.NoSuchFieldError: FACTORY_SIMPLE
     at com.jayway.jsonpath.spi.impl.JsonSmartJsonProvider.<init>(JsonSmartJsonProvider.java:38)
at com.jayway.jsonpath.spi.impl.JsonSmartJsonProvider.<init>(JsonSmartJsonProvider.java:41)
at com.jayway.jsonpath.spi.JsonProviderFactory.<clinit>  (JsonProviderFactory.java:24)
at    com.jayway.jsonpath.Configuration.defaultConfiguration(Configuration.java:62)
at com.jayway.jsonpath.internal.JsonReader.<init>(JsonReader.java:26)
at com.jayway.jsonpath.JsonPath.read(JsonPath.java:462)
at jsonPg.ReadJsonPath.main(ReadJsonPath.java:27)`

Любая помощь будет оценена по достоинству. Заранее спасибо .


person Tanmay Matondkar    schedule 05.05.2017    source источник
comment
Ты проверил свой путь? Это можно сделать с помощью одного из многих онлайн-инструментов, например. jsonpath.com.   -  person Iske    schedule 05.05.2017
comment
да, я проверил jsonPath. он работает правильно .. мне просто нужно, чтобы это работало в коде Java   -  person Tanmay Matondkar    schedule 05.05.2017
comment
Не могли бы вы поделиться json?   -  person Iske    schedule 05.05.2017


Ответы (1)


Вы можете достичь своей цели с помощью библиотеки JsonPath самостоятельно. Вот пример:

    String jsonString = "{ \"list\": [ { \"name\": \"foo1\"}, { \"name\": \"foo2\"} ]}";
    DocumentContext docCtx = JsonPath.parse(jsonString);
    JsonPath jsonPath = JsonPath.compile("$.list[?(@.name == \"foo1\")]");
    JSONArray val1=docCtx.read(jsonPath);
    System.out.println(val1);

Этот код распечатает:

[{"name":"foo1"}]

Требуемая зависимость maven:

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.2.0</version>
</dependency>

json-path также автоматически вытянет json-smart JAR:

<dependency>
    <groupId>net.minidev</groupId>
    <artifactId>json-smart</artifactId>
    <version>2.2.1</version>
</dependency>
person RZet    schedule 05.05.2017