使用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

原文地址:https://www.cnblogs.com/a00ium/p/10322952.html

时间: 2024-10-02 18:12:25

使用JSONPath的相关文章

JsonPath小结

在查看DHC Assertions 模块说明的时候,无意间发现assert模块中JsonBody使用了 JSON Path ,兴趣使然,看了下,发现是类似解析xml用到的 XPath.通过路径来获取json对象的属性值 JSON Path提供了javascript与PHP版本 XPath表达式:/store/book[1]/title JSON Path表达式:.store.book[0].title 或则 x['store']['book'][0]['title'] 同时,官网也有提到,像ja

JsonPath详解

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 i

Json.NET Updates: Merge, Dependency Injection, F# and JSONPath Support

Json.NET 6.0 received 4 releases this year, the latest last week. Over these releases, several new features have been added, including several F# specific features, support for JSONPath querying, ability to integrate with Dependency Injection framewo

python 数据提取之JSON与JsonPATH

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与后台之间的数据交互. JSON和XML的比较可谓不相上下. Python 2.7中自带了JSON模块,直接import json就可以使用了. 官方文档:http://docs.python.org/library/json.html Json在线解析网站:http://www.json.cn/#

Json与JsonPath

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因为它良好的可读性与易于机器进行解析和生成等特性,在当前的数据整理和收集中得到了广泛的应用. JSON和XML相比较可谓不相上下. Python 2.X中自带了JSON模块,直接import json就可以使用了. 官方文档:http://docs.python.org/library/json.html Json在线解析网站:http://www.json.cn JSONjson简单来说就是JavaSc

JSONPath - XPath for JSON

http://goessner.net/articles/JsonPath/ [edit] [comment] [remove] |2007-02-21| e1 # JSONPath - XPath for JSON A frequently emphasized advantage of XML is the availability of plenty tools to analyse, transform and selectively extract data out of XML do

jsonpath for js

/** * @license * JSONPath 0.8.0 - XPath for JSON * * Copyright (c) 2007 Stefan Goessner (goessner.net) * Licensed under the MIT (MIT-LICENSE.txt) licence. * * @param {Object|Array} obj * @param {String} expr * @param {Object} [arg] * @returns {Array|

使用jsonpath解析json内容

官网链接:https://github.com/jayway/JsonPath JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容.下面我把官网介绍的每个表达式用代码实现,可以更直观的知道该怎么用它. 一.首先需要依赖的jar包 二.因为编译的时候会报log4j的警报,所以需要在项目的src目录下新建log4j.properties文件,内容如下: log4j.rootLogger=WARN, stdoutlog4j.append

爬虫——json模块与jsonpath模块

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与后台之间的数据交互. JSON和XML相比较可谓不相上下. Python 3.X中自带了JSON模块,直接import json就可以使用了. 官方文档:http://docs.python.org/library/json.html Json在线解析网站:http://www.json.cn/# J

一.HttpClient、JsonPath、JsonObject运用

HttpClient详细应用请参考官方api文档:http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/apidocs/index.html 1.使用httpclient进行接口测试,所需jar包如下:httpclient.jar. httpcore.jar. commons-logging.jar 2.使用JSONObject插件处理响应数据 所需的6个JAR包:json-lib.jar.commons-beanutils.ja