15

私が取り組んでいるプロジェクトに関連する理由から、たとえば、JSON ファイルへのクエリ全体を文字列として保持したいと考えています$.store.book[*].title(ドキュメントの各レベルを個別のオブジェクトとして一時的に保存する必要はありません)。 .

私は現在、JsonPath (バージョン 0.8.0、私が見つけた最新のもの) を使用しています。これは基本的にまさに私が探しているものですが、以下に示す例外が発生しています。サンプル クエリの 1 つを使用して、JsonPath Google コード ページにあるサンプル 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());
}

例外:

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)

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" +
        "}";
4

3 に答える 3

23

MavenまたはGradleを使用している場合は、これを依存関係リストに追加するだけです。

Maven プロジェクトの場合:

Maven pom.xmlファイルで:

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

Gradle プロジェクトの場合:

Gradle build.gradleファイルの依存関係セクション

    testCompile 'com.jayway.jsonpath:json-path:2.2.0'

それはうまくいくはずです

于 2016-05-10T15:40:16.567 に答える
21

これらの依存関係をプロジェクトに追加する必要があると思います: https://code.google.com/p/json-path/downloads/detail?name=json-path-0.8.0-dependencies.zip&can=2&q=

特に、不足している例外クラスが含まれている json-smart-1.1.jar 。

于 2013-07-18T15:06:04.097 に答える