JsonPath NoClassDefFoundError,或Java中JsonPath的替代

fir*_*ant 14 java json jsonpath

由于与我正在处理的项目相关的原因,我希望将JSON文件的整个查询保存为字符串,例如,$.store.book[*].title(而不是必须将文档的每个级别临时存储为单独的对象) .

我目前正在使用JsonPath(版本0.8.0,这是我能找到的最新版本),这基本上正是我正在寻找的,但我得到的例外情况如下所示.我只是使用JsonPath谷歌代码页上给出的示例JSON,使用他们的一个示例查询.

我在这做错了什么?或者,如果没有解决方案,Java中是否有JsonPath的替代方案?我希望能够将整个查询作为字符串传递,并且它必须是Java.

功能:

public void testJsonPath() throws Exception
{
    String query = "$.store.book[*].title";
    List toRet = (List) JsonPath.read(practiceJson, query, new Filter[0]);
    System.out.println(toRet.toString());
}
Run Code Online (Sandbox Code Playgroud)

例外:

java.lang.NoClassDefFoundError: net/minidev/json/parser/ParseException
at com.jayway.jsonpath.spi.JsonProviderFactory$1.create(JsonProviderFactory.java:27)
at com.jayway.jsonpath.spi.JsonProviderFactory.createProvider(JsonProviderFactory.java:32)
at com.jayway.jsonpath.JsonPath.read(JsonPath.java:202)
at com.jayway.jsonpath.JsonPath.read(JsonPath.java:307)
at net.windward.datasource.test.TestJsonDataSource.testJsonPath(TestJsonDataSource.java:119)
Run Code Online (Sandbox Code Playgroud)

练习JSON:

private String practiceJson = "{\n" +
        "    \"store\": {\n" +
        "        \"book\": [ {\n" +
        "            \"category\": \"reference\",\n" +
        "            \"author\": \"Nigel Rees\",\n" +
        "            \"title\": \"Sayings of the Century\",\n" +
        "            \"price\": 8.95\n" +
        "        }, {\n" +
        "            \"category\": \"fiction\",\n" +
        "            \"author\": \"Evelyn Waugh\",\n" +
        "            \"title\": \"Sword of Honour\",\n" +
        "            \"price\": 12.99\n" +
        "        }, {\n" +
        "            \"category\": \"fiction\",\n" +
        "            \"author\": \"Herman Melville\",\n" +
        "            \"title\": \"Moby Dick\",\n" +
        "            \"isbn\": \"0-553-21311-3\",\n" +
        "            \"price\": 8.99\n" +
        "        }, {\n" +
        "            \"category\": \"fiction\",\n" +
        "            \"author\": \"J. R. R. Tolkien\",\n" +
        "            \"title\": \"The Lord of the Rings\",\n" +
        "            \"isbn\": \"0-395-19395-8\",\n" +
        "            \"price\": 22.99\n" +
        "        } ],\n" +
        "        \"bicycle\": [ {\n" +
        "            \"color\": \"red\",\n" +
        "            \"price\": 19.95,\n" +
        "            \"style\": [ \"city\", \"hybrid\" ]\n" +
        "        }, {\n" +
        "            \"color\": \"blue\",\n" +
        "            \"price\": 59.91,\n" +
        "            \"style\": [ \"downhill\", \"freeride\" ]\n" +
        "        } ]\n" +
        "    }\n" +
        "}";
Run Code Online (Sandbox Code Playgroud)

Fed*_*dy2 21

我认为您必须将这些依赖项添加到您的项目中:https: //code.google.com/p/json-path/downloads/detail?name = json-path-0.8.0-dependencies.zip&can = 2&q =

特别是包含缺少的Exception类的json-smart-1.1.jar.


Jor*_*elC 18

如果您使用的是MavenGradle,只需将其添加到依赖项列表中:

对于Maven项目:

Maven pom.xml文件中:

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.2.0</version>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

对于Gradle项目:

Gradle build.gradle文件的dependencies部分中

    testCompile 'com.jayway.jsonpath:json-path:2.2.0'
Run Code Online (Sandbox Code Playgroud)

它应该工作