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

Jsonpath与Jackson或Gson

蒯宏达
2023-03-14
问题内容

我正在获取一个很大的json文档,我只想将其中的一部分解析为我的java类。我正在考虑使用jsonpath之类的东西来从中提取部分数据,而不是创建Java类的整个层次结构。

Jackson或Gson是否以任何方式支持jsonpath?如果是,您能否为此提供一些示例或指向另一个标准库?

例如,假设我有一个下面的文档,而我想在我的java类中仅从下面提取数据:

$ .store.book [0]-仅第一本书$ .store.bicycle.price-自行车的价格

{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}

问题答案:

该Jayway JsonPath图书馆阅读使用JSON路径值的支持。

例如:

String json = "...";

Map<String, Object> book = JsonPath.read(json, "$.store.book[0]");
System.out.println(book);  // prints {category=reference, author=Nigel Rees, title=Sayings of the Century, price=8.95}

Double price = JsonPath.read(json, "$.store.bicycle.price");
System.out.println(price);  // prints 19.95

您还可以将JSON对象直接映射到类,例如在GSON或Jackson中:

Book book = JsonPath.parse(json).read("$.store.book[0]", Book.class);
System.out.println(book);  // prints Book{category='reference', author='Nigel Rees', title="Sayings of the Century", price=8.95}

如果您想专门使用GSON或Jackson进行反序列化(默认为使用json-smart),也可以配置以下命令:

Configuration.setDefaults(new Configuration.Defaults() {
    private final JsonProvider jsonProvider = new JacksonJsonProvider();
    private final MappingProvider mappingProvider = new JacksonMappingProvider();

    @Override
    public JsonProvider jsonProvider() {
        return jsonProvider;
    }

    @Override
    public MappingProvider mappingProvider() {
        return mappingProvider;
    }

    @Override
    public Set<Option> options() {
        return EnumSet.noneOf(Option.class);
    }
});

有关更多详细信息,请参见文档。



 类似资料:
  • 问题内容: 由于与我正在从事的项目有关的原因,我希望对JSON文件的整个查询都以字符串形式保存(例如,(而不是必须将文档的每个级别临时存储为单独的对象)) 。 我目前正在使用JsonPath(版本0.8.0,这是我能找到的最新版本),基本上这正是我在寻找的东西,但是我得到了下面显示的异常。我只是使用JsonPath Google代码页上的示例JSON,并使用其中的一个示例查询。 我在这里做错了什么

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

  • JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。 JSON和XML的比较可谓不相上下。 官方文档:http://docs.python.org/library/json.html Json在线解析网站:http://www.js

  • JsonPath 对于 JSON 来说相当于 XPATH 对于 XML。这是一个简单的从文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Java, Python 和 PHP

  • 问题内容: 我正在使用spring- boot开发后端服务。有一种方案可以比较2个bean(一个是DB对象,另一个是客户请求的对象),然后返回“新元素”,“修改后的元素”,如果没有变化,则返回false。2豆格式如下 我已经在Java上浏览了有关此方案的bean比较的Internet,但是找不到任何更简单的解决方案,但是找到了一些很酷的JSON解决方案。我可以看到GSON的一些解决方案,但它不会返

  • 问题内容: 我在下面的序列化器中进行JodaTime处理: 然后,在每个模型对象上,执行以下操作: 通过以上设置,肯定可以工作。但是,我不喜欢继续写书的想法。我需要的是没有模型对象的解决方案。是否可以将这种配置作为一个配置写入spring xml的某个地方? 感谢你的帮助。 问题答案: 尽管你可以为每个日期字段添加注释,但最好为对象映射器进行全局配置。如果使用杰克逊,则可以按以下方式配置弹簧: 对