当前位置: 首页 > 面试题库 >

JsonPath NoClassDefFoundError,或Java中JsonPath的替代方法

邓赤岩
2023-03-14
问题内容

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

我目前正在使用JsonPath(版本0.8.0,这是我能找到的最新版本),基本上这正是我在寻找的东西,但是我得到了下面显示的异常。我只是使用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" +
        "}";

问题答案:

我认为您必须将这些依赖项添加到您的项目中: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。



 类似资料:
  • 我目前使用的是JsonPath(0.8.0版本,这是我能找到的最新版本),这基本上正是我要寻找的,但是我得到了如下所示的异常。我只是使用JsonPath google代码页上给出的示例JSON,使用他们的示例查询之一。 我在这里做错了什么?或者,如果没有解决方案,那么Java中是否有JsonPath的替代方案?我希望能够以字符串的形式传递整个查询,而且必须是Java的。 功能: 例外情况: 实践J

  • 问题内容: 我从没想过会发生这种情况,但是遇到了我的第一个Java错误: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5003595 我几乎与错误(在Linux上为NFS)中描述的情况完全相同,并且我看到File.exists()没有返回正确的值(至少不是立即返回)。 所以我的问题是,这种检查文件是否存在的方法是否可以替代?如果可能的话,我

  • 问题内容: 我有以下使用Java 7功能(如 java.nio.file.Files和java.nio.file.Paths)的代码 现在,我必须在Java 6上运行相同的代码,除了使用FileReader之外,还有哪些最佳替代方案? 问题答案: 替代方法是java.io或Apache Commons IO中的类,Guava IO也可以提供帮助。 番石榴是最现代的,所以我认为这是最适合您的解决方案

  • 问题内容: 我想知道是否存在现有的替代方法,或者如何在Java 5之前实现java.util.concurrent.locks.Lock#tryLock()的语义。如果锁已经被持有,则有可能立即退后另一个线程。 问题答案: 如果需要支持操作,则不能使用Java的固有锁定功能。您必须实现自己的类,该类维护所需的状态,即所有者和计数器,并可能使用内在锁定来实现其线程安全更新和阻止(在较早的Java版本

  • 问题内容: 我正在实现自己的使用 合并功能 的收集器。不幸的是,对于我的某些情况,我无法重用抛出 IllegalStateException 的以下JDK合并函数。 发生这种情况是因为它具有 私有 访问修饰符,并且限制了其他(而非内部)类的访问。但是,javadoc表示以下内容: 这可以用来执行以下假设:所收集的元素是不同的 但是,正如我所看到的,java doc已经过时了。无法使用。问题是JDK

  • 问题内容: replace方法返回一个字符串对象而不是替换给定字符串的内容这一事实有点让人费解(但是,当您知道字符串在Java中是不可变的时,这是可以理解的)。通过在某些代码中使用深度嵌套的替换,我的性能受到了重大影响。有什么我可以替换的东西可以使它更快吗? 问题答案: 这就是StringBuilder的目的。如果要进行很多操作,请在上进行操作,然后在需要时将其转换为。 因此描述: “可变的字符序