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>

json-path解析json方便可靠的更多相关文章

  1. JMeter 插件 Json Path 解析 HTTP 响应 JSON 数据(转)

    JMeter 是一个不错的负载和性能测试工具,我们也用来做 HTTP API 接口测试.我们的 API 返回结果为 JSON 数据格式.JSON 简介,JSON 教程. JSON 已经成为数据交换格式 ...

  2. JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

    JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

  3. Python | JSON 数据解析(Json & JsonPath)

    一.什么是JSON? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一 ...

  4. JMeter 插件 Json Path 解析HTTP响应JSON数据

    一.基本简介 JMeter 是一个不错的负载和性能测试工具,我们也用来做 HTTP API 接口测试.我们的 API 返回结果为JSON数据格式.JSON 简介,JSON 教程. JSON 已经成为数 ...

  5. SQL FOR JSON PATH 返回 json

    --直接返回 age FOR JSON PATH --返回值 [{"name":"张学友","age":60}] select c1, c2 ...

  6. Python3基础 json.loads 解析json格式的数据,得到一个字典

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  7. JSON.parse 解析json字符串时,遇换行符报错

    Json字符串转换成Json对象时候,有两种方式: 假设d是json字符串: 1,eval('(' + d + ')'). 2,JSON.parse(d): 但是以上方式有隐患,如果Json字符串有换 ...

  8. C#使用Json.NET解析Json

    本文转载自 http://xiaosheng.me/2016/10/01/article25/ 最近在 C# 项目中需要使用到 Json 格式的数据,我简单上网搜索了一下,基本上有两种操作 Json ...

  9. Android原生生成JSON与解析JSON

    JSON数据是一种轻量级的数据交换格式,在Android中通常应用于client与server交互之间的传输数据.像如今在网上有非常多解析JSON数据的jar包,可是归根究竟用的都是Android原生 ...

  10. scala解析json —— json4s 解析json方法汇总

    使用json4s的框架,包括spark,flink 1.org.json4s 引入pom的方法 对于本地支持,引入以下依赖项添加到pom中 <dependency> <groupId ...

随机推荐

  1. [oldboy-django][2深入django]Form总结

    1 form总结 # Form数据格式验证 - 原理: - 流程 a.写类LoginForm(Form): 字段名 = fields.xxFields() # 验证规则,本质是正则表达式(fields ...

  2. python 打印9*9乘法表

    # -*- coding: utf8 -*- # Author:wxq 1. for i in range(1,10): for j in range(1,i+1): print "%d*% ...

  3. 查看apache和nginx的负载和连接数情况

    1.查看apache当前并发访问数:netstat -an | grep ESTABLISHED | wc -l对比httpd.conf中MaxClients的数字差距多少. 2.查看有多少个进程数: ...

  4. Linux系统基础优化总结

    请称呼我搬运工,哈哈 优化综合 https://www.cnblogs.com/yinshoucheng-golden/p/6149556.html (1)不用root管理,以普通用户的名义通过sud ...

  5. linux服务器上设置多主机头,设置多web站点

    假设VPS的IP是58.130.17.168,有两个域名指向该IP,分别是domain1.com, domain2.com, 修改/etc/httpd/conf/httpd.conf,在文件的最后加入 ...

  6. MYSQL常用的Show命令笔记

    1.查询数据库 SHOW DATABASES; 2.查询数据库中表 SHOW TABLES; SHOW TABLES FROM db; 3.查询表索引 SHOW INDEX FROM table 4. ...

  7. Python 使用cx_freeze 生成exe文件【转】

    Python 使用cx_freeze 生成exe文件   在python中比较常用的python转exe方法有三种,分别是cx_freeze,py2exe,PyInstaller.py2exe恐怕是三 ...

  8. [LeetCode] Sudoku Solver 解数独,递归,回溯

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  9. DOS头结构

    DOS头结构typedef struct _IMAGE_DOS_HEADER {                 // DOS .EXE header   +0h WORD   e_magic;    ...

  10. shell script timer and 無限迴圈

    while : do echo " infinite loop" sleep 2; done