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的更多相关文章

  1. restassured - JsonPath

    https://github.com/rest-assured/rest-assured/blob/master/json-path/src/test/java/io/restassured/path ...

  2. jsonpath

    1. java 类库 jayway/JsonPath maven 使用方法 <dependency> <groupId>com.jayway.jsonpath</grou ...

  3. 使用jsonpath解析json内容

    JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容.下面我把官网介绍的每个表达式用代码实现,可以更直观的知道该怎么用它. 一.首先需要 ...

  4. 好用的json-path

    $.store.book[?(@.price < 10)].title Here is a complete overview and a side by side comparison of ...

  5. JsonPath详解

    JsonPath is to JSON what XPATH is to XML, a simple way to extract parts of a given document. JsonPat ...

  6. 一.HttpClient、JsonPath、JsonObject运用

    HttpClient详细应用请参考官方api文档:http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/apidocs/index.h ...

  7. jsonpath读取json数据格式公用方法!!!

    import java.util.LinkedHashMap; import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.Pred ...

  8. Python爬虫(十六)_JSON模块与JsonPath

    本篇将介绍使用,更多内容请参考:Python学习指南 数据提取之JSON与JsonPATH JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它是的人们很容易 ...

  9. JSONPath使用

    JSONPath是fastjson在1.2.0之后支持的.JSONPath是一个很强大的功能.关于JSONPath的介绍请查看官方文档 JSONPath. 官方文档上给出了详细的说明以及使用.但是官方 ...

  10. Python_实现json数据的jsonPath(精简版)定位及增删改操作

    基于python实现json数据的jsonPath(精简版)定位及增删改操作   by:授客 QQ:1033553122 实践环境 win7 64 Python 3.4.0 代码 #-*- encod ...

随机推荐

  1. SpringMVC的API和Spring的官方说明文档的地址。

    SpringMVC的API和Spring的官方说明文档的地址. 1.SpringMVC的API的URL: http://docs.spring.io/spring/docs/current/javad ...

  2. 关于RabbitMQ简介

    RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准 ...

  3. kettle结合MySQL生成保留最近6个月月度报告_20161009

    之前计算用户ID各月的金额(各月在列字段),用的是下面代码 ,b.金额,,b.金额,,b.金额,NULL)) AS 9月金额 FROM ( SELECT city AS 城市,DATE_FORMAT( ...

  4. ELK安装配置简单使用

    ELK是三款软件的总称,包括了elasticsearch.logstash.kibana,其实在生产使用中,我们还需要使用到其他的更多辅助软件来更好更合理的收集展示数据. Elasticsearch: ...

  5. UDK性能优化

    转自:http://www.cnblogs.com/NEOCSL/p/3320510.html 优化问题有很多内容可讲,涉及林林总总.今天我总结一下优化注意的地方. 1.从AnimTree和Skele ...

  6. Java面试知识点总结(1)

    1.Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么? 原始数据类型 大小(byte) 对应封装类型 boolean 1或4 Boolean byte 1 Byte short 2 S ...

  7. 面试题: 数据库操作面试 已看1 很典型的sql面试题

    摘要:今天参加了大展公司的一个电话面试,那位先生首先问我查询一个表的问题,条件是:1.一个数据表,有username字段.2.查询数据表中姓名姓张的.姓李的.姓刘的总数,并展现在一张表中.我当时就糊涂 ...

  8. 使用go实现基于命令行的计算器程序

    项目目录结构 calcs.go源文件 package main import ( "fmt" "os" "strconv" "my ...

  9. HDU 5547 Sudoku (暴力)

    题意:数独. 析:由于只是4*4,完全可以暴力,要注意一下一些条件,比如2*2的小方格也得是1234 代码如下: #pragma comment(linker, "/STACK:102400 ...

  10. ADT-Bundle--Android开发环境快速搭建

    http://blog.csdn.net/aizquan/article/details/8974750