JsonPath NoClassDefFoundError, oder eine alternative zu JsonPath in Java
Für Gründen im Zusammenhang mit dem Projekt an dem ich arbeite, möchte ich eine komplette Abfrage an eine JSON-Datei gehalten werden als eine Zeichenkette, zum Beispiel $.store.book[*].title
(anstatt zu speichern Sie jede Ebene des Dokuments vorübergehend als separates Objekt).
Ich bin derzeit mit JsonPath (version 0.8.0, die war die neueste, die ich finden konnte), das ist im Grunde genau das, was ich Suche, aber ich bin immer die Ausnahme, die unten gezeigt. Ich bin nur mit der Beispiel-JSON auf dem JsonPath google-code-Seite, die mit einem Ihrer Probe Abfragen.
Was mache ich hier falsch? Alternativ, wenn es nicht eine Lösung, gibt es alternativen zu JsonPath in Java? Ich möchte in der Lage sein, um eine komplette Abfrage als string und es muss Java sein.
Funktion:
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());
}
Ausnahme:
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)
Die Praxis 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" +
"}";
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie hinzufügen müssen, um diese Abhängigkeiten zu Ihrem Projekt:
https://code.google.com/p/json-path/downloads/detail?name=json-path-0.8.0-dependencies.zip&can=2&q=
Insbesondere json-smart-1.1.jar wo das fehlende Exception-Klasse enthalten ist.
Wenn Sie Maven oder Gradle, müssen nur fügen Sie diese Ihrer Liste "Abhängigkeiten":
Für Maven-Projekte:
In Ihrem Maven pom.xml Datei :
Für Gradle-Projekte:
In der Abhängigkeiten Abschnitt in Ihrem Gradle bauen.gradle Datei
Sollte es funktionieren
Wenn es widersprüchliche Versionen von
json-smart
, wenn die ältere version ausgewählt wird, die nicht die erwartete Klasse.Wie zu beheben
Überprüfen Sie die Versionen mit
mvn dependency:tree
.Unten, es gibt
net.minidev:json-smart:jar:1.1.1:compile
undcom.jayway.jsonpath:json-path:jar:1.1.0:test
was nutzt die neueste version vonjson-smart
.So, schließen Sie die ältere version von
json-smart
von der Abhängigkeit alsjson-path
hat die neueste version vonjson-smart
.zB.