使用JSONPath
SONPath是查询JSON对象元素的标准方法。JSONPath使用路径表达式来导航JSON文档中的元素,嵌套元素和数组。有关JSON的更多信息,请参阅JSON简介。
使用JSONPath访问JSON元素
接下来,您可以找到如何使用JSONPath表达式访问JSON格式数据中的各种元素。对于本节中的示例,假设源流包含以下格式的JSON记录。
{
"customerName":"John Doe",
"address":
{
"streetAddress":
[
"number":"123",
"street":"AnyStreet"
],
"city":"Anytown"
}
"orders":
[
{ "orderId":"23284", "itemName":"Widget", "itemPrice":"33.99" },
{ "orderId":"63122", "itemName":"Gadget", "itemPrice":"22.50" },
{ "orderId":"77284", "itemName":"Sprocket", "itemPrice":"12.00" }
]
}
访问JSON元素
要使用JSONPath在JSON数据中查询元素,请使用以下语法。这里,$
表示数据层次结构的根,并且elementName
是要查询的元素节点的名称。
$.elementName
以下表达式查询customerName
前面的JSON示例中的元素。
$.customerName
前面的表达式从前面的JSON记录返回以下内容。
John Doe
注意
路径表达式区分大小写。表达式从前面的JSON示例$.Name
返回null
。
注意
如果路径表达式指定的位置不显示任何元素,则返回表达式null
。以下表达式null
从前面的JSON示例返回 ,因为没有匹配的元素。
$.customerId
访问嵌套的JSON元素
要查询嵌套的JSON元素,请使用以下语法。
$.parentElement
.element
以下表达式查询city
前面的JSON示例中的元素。
$.address.city
前面的表达式从前面的JSON记录返回以下内容。
Anytown
您可以使用以下语法查询更多级别的子元素。
$.parentElement
.element
.subElement
以下表达式查询street
前面的JSON示例中的元素。
$.address.streetAddress.street
前面的表达式从前面的JSON记录返回以下内容。
AnyStreet
访问数组
使用方括号([]
)内的数组索引表达式查询数组。目前,唯一支持的索引表达式是 0:
,表示返回数组中的所有元素。
返回的数据格式取决于数组索引表达式是否是路径中的最后一个表达式:
当数组索引是路径表达式中的最后一个表达式时,该数组的所有内容都将作为单个数据行中的单个字段返回。
当数组索引表达式之后存在嵌套表达式时,该数组将“展平”。换句话说,数组中的每个元素都作为单独的数据行返回。
要将数组的整个内容作为单行查询,请使用以下语法。
$.arrayObject
[0:]
以下表达式查询orders
前面的JSON示例中元素的全部内容 。它将数组内容返回到单行的单个列中。
$.orders[0:]
前面的表达式从前面的JSON记录返回以下内容。
[{"orderId":"23284","itemName":"Widget","itemPrice":"33.99"},{"orderId":"61322","itemName":"Gadget","itemPrice":"22.50"},{"orderId":"77284","itemName":"Sprocket","itemPrice":"12.00"}]
要将数组中的各个元素作为单独的行进行查询,请使用以下语法。
$.arrayObject
[0:].element
以下表达式查询orderId
前面的JSON示例中的元素,并将每个数组元素作为单独的行返回。
$.orders[0:].orderId
前面的表达式从前面的JSON记录返回以下内容,每个数据项作为单独的行返回。
23284 |
63122 |
77284 |
注意
如果查询非阵列元素的表达式包含在查询单个数组元素的模式中,则对阵列中的每个元素重复非阵列元素。例如,假设前面的JSON示例的模式包含以下表达式:
$ .customerName
$ .orders [0:]的orderId。
在这种情况下,来自样本输入流元素的返回数据行类似于以下内容,name
每个orderId
元素都重复该元素。
约翰·多伊 |
23284 |
约翰·多伊 |
63122 |
约翰·多伊 |
77284 |
注意
以下限制适用于Amazon Kinesis Data Analytics中的数组表达式:
数组表达式中仅支持一个级别的解除引用。不支持以下表达式格式。
$.
arrayObject
[0:].element
[0:].subElement
架构中只能展平一个数组。可以引用多个数组作为包含数组中所有元素的一行返回。但是,只有一个数组可以将每个元素作为单独的行返回。
包含以下格式的元素的模式是有效的。此格式将第二个数组的内容作为单个列返回,对第一个数组中的每个元素重复。
$.arrayObjectOne
[0:].element
$.arrayObjectTwo
[0:]包含以下格式的元素的模式无效。
$.arrayObjectOne
[0:].element
$.arrayObjectTwo
[0:].element
其他考虑因素
使用JSONPath的其他注意事项如下:
如果JSONPath表达式中的单个元素未访问任何数组,则会为处理的每个JSON记录创建一行。每个JSONPath表达式对应一个列。
当数组被展平时,任何缺少的元素都会导致在应用程序内部流中创建空值。
数组总是扁平化为至少一行。如果不返回任何值(即,数组为空或未查询其元素),则返回具有所有空值的单个行。
以下表达式返回前面的JSON示例中具有空值的记录,因为在指定的路径中没有匹配的元素。
$.orders[0:].itemId
前面的表达式从前面的JSON示例记录返回以下内容。
空值
空值
空值
https://docs.aws.amazon.com/kinesisanalytics/latest/dev/about-json-path.html
使用JSONPath的更多相关文章
- restassured - JsonPath
https://github.com/rest-assured/rest-assured/blob/master/json-path/src/test/java/io/restassured/path ...
- jsonpath
1. java 类库 jayway/JsonPath maven 使用方法 <dependency> <groupId>com.jayway.jsonpath</grou ...
- 使用jsonpath解析json内容
JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容.下面我把官网介绍的每个表达式用代码实现,可以更直观的知道该怎么用它. 一.首先需要 ...
- 好用的json-path
$.store.book[?(@.price < 10)].title Here is a complete overview and a side by side comparison of ...
- JsonPath详解
JsonPath is to JSON what XPATH is to XML, a simple way to extract parts of a given document. JsonPat ...
- 一.HttpClient、JsonPath、JsonObject运用
HttpClient详细应用请参考官方api文档:http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/apidocs/index.h ...
- jsonpath读取json数据格式公用方法!!!
import java.util.LinkedHashMap; import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.Pred ...
- Python爬虫(十六)_JSON模块与JsonPath
本篇将介绍使用,更多内容请参考:Python学习指南 数据提取之JSON与JsonPATH JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它是的人们很容易 ...
- JSONPath使用
JSONPath是fastjson在1.2.0之后支持的.JSONPath是一个很强大的功能.关于JSONPath的介绍请查看官方文档 JSONPath. 官方文档上给出了详细的说明以及使用.但是官方 ...
- Python_实现json数据的jsonPath(精简版)定位及增删改操作
基于python实现json数据的jsonPath(精简版)定位及增删改操作 by:授客 QQ:1033553122 实践环境 win7 64 Python 3.4.0 代码 #-*- encod ...
随机推荐
- jquery 用addClass之后 class有对应的事件,为什么要重新绑定一下事件呢
假设有元素A,B,C,其中A和B都有class属性cls,如果在页面加载完成时,给具有class属性为cls的元素绑定某一事件,例如click,执行事件时调用alert.也就是说,页面加载完成后A和B ...
- Codeforces 872C Maximum splitting:数学【分解成合数之和】
题目链接:http://codeforces.com/contest/872/problem/C 题意: 给你一个数n,问你最多能将n分解成多少个合数之和.(若不能分解,输出-1) 题解: 若要让合数 ...
- 有时候,Visual C++代码中加中文注释会导致错误!
今天做题发现了个奇葩错误,以此警戒自己. 张某,做的一道题. --------------------------------------------------------------------- ...
- ES 搜索结果expalain 可以类似数据库性能调优来看排序算法的选择
When we run a simple term query with explain set to true (see Understanding the Score), you will see ...
- HihoCoder1644 : 完美命名的烦恼([Offer收割]编程练习赛37)(有向图的一笔画问题||欧拉路)
描述 程序员常常需要给变量命名.给函数命名.给项目命名.给团队命名…… 好的名字可以大大提高程序员的主观能动性,所以很多程序员在起名时都会陷入纠结和烦恼. 小Hi希望给新的项目起个完美的名字.首先小H ...
- 构建基于虚拟用户的vsftpd服务器
安装: [root@server ~]# yum install -y vsftpd [root@server ~]# rpm -ql vsftpd /etc/logrotate.d/vsftpd / ...
- 如何将 Python 程序打包成 .exe 文件?
有不少订阅本公众号的朋友都不是玩 Python,甚至都不是计算机相关专业的,当我给他们一个 Python 程序时,他们是完全不知道该怎么运行的. 于是我想是不是可以将我的程序打包成可执行文件,直接运行 ...
- tomcat集群--单tomcat多实例
1.解压apache-tomcat-7.0.75.tar.gz到任意目录 /data/tomcat-4X 2.建立tomcat多实例目录,这个tomcat-4X运行4X应用的两个实例4002,4004 ...
- poj 3415 Common Substrings —— 后缀数组+单调栈
题目:http://poj.org/problem?id=3415 先用后缀数组处理出 ht[i]: 用单调栈维护当前位置 ht[i] 对之前的 ht[j] 取 min 的结果,也就是当前的后缀与之前 ...
- session.write类型引发的思考---Mina Session.write流程探索.doc--zhengli
基于Mina开发网络通信程序,在传感器数据接入领域应用的很广泛,今天我无意中发现一个问题,那就是我在前端session.write(msg)数据出去之后,却没有经过Filter的Encoder方法,同 ...