zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    由Photoshop高反差保留算法原理联想到的一些图像增强算法。
    一种具有细节保留功能的磨皮算法。
    图像抠图算法学习
    一年去雾算法研究的总结。
    关于《半反去雾算法》一文的四宗罪。
    自己编码使用去色、曲线、色阶算法实现照片怀旧特效。
    基于中值滤波或双边滤波方式的图像去雾效果的研讨。
    24位真彩色图像转换为16位高彩色图像的实现方法及效果改进
    对比度保留之彩色图像去色算法---基础算法也可以上档次。
    Tone Mapping算法系列一:基于Fast Bilateral Filtering 算法的 High-Dynamic Range(HDR) 图像显示技术。
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/6813887.html
Copyright © 2011-2022 走看看