当前位置:  开发笔记 > 编程语言 > 正文

Jsonpath与Jackson或Gson

如何解决《Jsonpath与Jackson或Gson》经验,为你挑选了1个好方法。

我得到一个大的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
}

andersschull.. 19

该Jayway JsonPath库中有使用JSON路径读数值的支持.

例如:

String json = "...";

Map 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

有关详细信息,请参阅文档.



1> andersschull..:

该Jayway JsonPath库中有使用JSON路径读数值的支持.

例如:

String json = "...";

Map 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

有关详细信息,请参阅文档.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有