JSON

path解析json方便可靠

字号+ 作者:H5之家 来源:H5之家 2017-05-08 10:01 我要评论( )

json-path解析json方便可靠

JsonPath is to JSON what XPATH is to XML, a simple way to extract parts of a given document. JsonPath is available in many programming languages such as Javascript, Python and PHP. Now also in Java!

News

2013-09-27 Released 0.9.0 bug fixes, general improvements

2012-04-16 Released 0.8.1 bug fixes, improved docs, general improvements

2012-03-08 Released 0.8.0 bug fixes, Filter builder, Json model, POJO mapping (optional) and compliance improvements.

2012-02-09 Released 0.5.6 including bug fixes and performance improvements.

Given

{ "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,

        "isbn": "0-553-21311-3"

      }

    ],

    "bicycle": {

      "color": "red",

      "price": 19.95

    }

  }

}

Read

All authors:

List<String> authors = JsonPath.read(json, "$.store.book[*].author");

Author of first book in store:

String author = JsonPath.read(json, "$.store.book[1].author");

All books with category = "reference"

List<Object> books = JsonPath.read(json, "$.store.book[?(@.category == 'reference')]");

List<Object> books = JsonPath.read(json, "$.store.book[?]", filter(where("category").is("reference")));

All books that cost more than 10 USD

List<Object> books = JsonPath.read(json, "$.store.book[?(@.price > 10)]");

List<Object> books = JsonPath.read(json, "$.store.book[?]", filter(where("price").gt(10)));

All books that have isbn

List<Object> books = JsonPath.read(json, "$.store.book[?(@.isbn)]");

List<Object> books = JsonPath.read(json, "$.store.book[?]", filter(where("isbn").exists(true)));

Chained filters

Filter filter = Filter.filter(Criteria.where("isbn").exists(true).and("category").in("fiction", "reference"))

List<Object> books = JsonPath.read(json, "$.store.book[?]", filter);

Custom filters

Filter myFilter = new Filter.FilterAdapter<Map<String, Object>>(){

                @Override

                public boolean accept(Map<String, Object> map) {

                     return map.containsKey("isbn");  

                }

            };

List<Object> books = JsonPath.read(json, "$.store.book[?]", myFilter);

All prices in the document

List<Double> prices = JsonPath.read(json, "$..price");

Compiled path

You can pre compile a path and use it multiple times

JsonPath path = JsonPath.compile("$.store.book[*]");

List<Object> books = path.read(json);

Assert

Asserts are made with Hamcrest matchers

JsonAssert.with(json).assertThat("$.store.bicycle.color", Matchers.equalTo("red"))

          .assertThat("$.store.bicycle.price", Matchers.equalTo(19.95D));

Add some static imports and you get this

with(json).assertThat("$.store.bicycle.color", equalTo("red"))

          .assertThat("$.store.bicycle.price", equalTo(19.95D));

The Hamcrest library contains a lot of different matchers and they can often be nested.

with(json).assertThat("$..author", hasItems("Nigel Rees", "Evelyn Waugh"))

          .assertThat("$..author", is(collectionWithSize(equalTo(2))));

with(json).assertThat("$.store.book[?(@.category == 'x')]", emptyCollection());

If you don't find the matcher you need, roll your own.

Download

Json-path is available at Maven Central

<dependency>

    <groupId>com.jayway.jsonpath</groupId>

    <artifactId>json-path</artifactId>

    <version>0.9.1</version>

</dependency>

<dependency>

    <groupId>com.jayway.jsonpath</groupId>

    <artifactId>json-path-assert</artifactId>

    <version>0.9.1</version>

    <scope>test</scope>

</dependency>

Tags:jsonpath   json   java

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • json工具类总结

    json工具类总结

    2017-05-08 09:01

  • javascript eval跟JSON之间的联系

    javascript eval跟JSON之间的联系

    2017-05-08 08:00

  • JSON的学习和使用

    JSON的学习和使用

    2017-05-07 17:02

  • Springboot 实现 Restful 服务,基于 HTTP / JSON 传输

    Springboot 实现 Restful 服务,基于 HTTP / JSON 传输

    2017-05-05 14:00

网友点评