Kettle实战100篇 第17篇 JSONPath组件介绍说明

本文介绍了JSONPath组件,一个用于处理JSON的Java DSL,详细讲解了其表示法、过滤器、综合示例及Java使用方法。特别讨论了返回多个元素的注意事项,以及如何在Java中高效地使用JSONPath,包括配置选项和过滤规则。
摘要由CSDN通过智能技术生成


在我们使用JSON input组件的时候,设置字段映射时,由于Kettle使用的是JSONPath组件来进行解析的,因此我们就需要了解他的相关语法

JSONPath是一个用于读取JSON的Java DSL操作库

GitHub:https://github.com/json-path/JsonPath

在线调试:http://jsonpath.herokuapp.com/

表示法

JSONPath表达式用于指定JSON结构元素(或一组元素)的路径.路径的表示法可以使用点表示,如下:

$.store.book[0].title

或者括号表示:

$['store']['book'][0]['title']

**$**所代表的是JSON根路径,在使用时可以忽略.例如$.foobar.namefoobar.name所表达的意思是一样的,同理$[0].status[0].status也一样

其他语法元素如下表:

表达式 说明
$ 根对象或者数组
.property 选择父对象中指定的属性
[property] 选择父对象中的指定属性。务必在属性名称周围加上单引号。
如果属性名称包含空格等特殊字符,或者以A…Za…z_以外的字符开头,请使用此表示法
[n] 从数组中选择第n个元素。索引从0开始。
[index1,index2,…] 选择具有指定索引的数组元素。返回一个集合列表。
..property 递归查找:递归搜索指定的属性名称,并返回具有此属性名称的所有值的数组。即使只找到一个属性,也始终返回一个列表。
* 通配符选择对象或数组中的所有元素,无论其名称或索引如何。例如,address.*。*表示地址对象的所有属性,book [*]表示书籍数组的所有项目
[start:end] or [start:] 从起始索引中选择数组元素,最多但不包括结束索引。如果省略end,则从开始到数组结束选择所有元素。返回一个列表。
[:n] 选择数组的前n个元素。返回一个列表。
[-n:] 选择数组的最后n个元素。返回一个列表。
[?expression] 过滤表达式。选择对象或数组中与指定过滤器匹配的所有元素。返回一个列表。
[(expression)] 可以使用脚本表达式代替显式属性名称或索引。一个例子是[(@.length-1)],它选择数组中的最后一项。这里,length指的是当前数组的长度,而不是名为length的JSON字段。
@ 在过滤器表达式中用于引用正在处理的当前节点。

注意:

  • JSONPath表达式(包括属性名称和值)区分大小写。
  • 与XPath不同,JSONPath没有用于从给定节点访问父节点或兄弟节点的操作。

过滤器

过滤器是用于过滤数组的逻辑表达式。带有过滤器的JSONPath表达式的示例

$.store.book[?(@.price < 10)]

其中@表示当前正在处理的数组项或对象。过滤器也可以使用$来引用当前对象之外的属性

$.store.book[?(@.price < $.expensive)]

只指定属性名称的表达式如[?(@.isbn)]将匹配具有此属性的所有项目,无论值如何

此外,过滤器支持一下运算符

操作符 说明
== 等于,1和'1'被认为是相等的,字符串值必须用单引号括起来(不是双引号):例如[?(@.color=='red')]
!= 不等于。字符串值必须用单引号括起来。
> 大于
>= 大于等于
< 小于
<= 小于等于
=~ 匹配JavaScript正则表达式,例如[?(@.description=~ /cat.*/i)]匹配描述以cat开头的项(不区分大小写)
! 用于否定,例如[?(!@.isbn)]匹配没有isbn属性的项目
&& 逻辑AND,用于组合多个过滤器表达式,例如:[?(@.category=='fiction' && @.price < 10 )]
|| 逻辑OR,用于组合多个过滤器表达式,例如:[?(@.category=='fiction' || @.price < 10 )]

综合示例

目前我们有如下JSON结构:

{
   
  "store": {
   
    "book": [
      {
   
        "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      {
   
        "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      {
   
        "category": "fiction",
        "author": "J.R.R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
   
      "color": "red",
      "price": 19.95
    }
  },
  "expensive": 10
}

在下面的例子中,$符号是可选的,可以省略掉:

表达式 说明
$.store.* store对象下所有的属性(非递归)
$.store.bicycle.color 获取得到color属性的值,结果为red
$.store..price
$..price
返回所有的price属性值集合,结果为[8.95,8.99,22.99,19.95]
$.store.book[*]
$..book[*]
所有的book集合
$..book[*].title 返回book对象下的所有标题集合
$..book[0] 返回第一个book集合对象,结果为[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95}]
$..book[0].title 返回第一个book集合对象中的title属性,结果是Sayings of the Century
$..book[0,1].title
$..book[:2].title
返回前2个book集合对象的title属性,结果是[Sayings of the Century, Moby Dick]
$..book[-1:].title
$..book[(@.length-1)].title
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我没有办法提供一个完整的"kettle实战100"的资源。不过,我可以给你一些关于kettle实战建议和指导。Kettle(也称为Pentaho Data Integration)是一个强大的开源ETL工具,用于数据集成、数据转换和数据加载。 以下是一些使用kettle进行实战的建议: 1. 学习基本概念:了解kettle的基本概念,包括转换(Transformation)和作业(Job),以及它们在数据处理中的作用。 2. 安装和配置:下载并安装最新版本的kettle。确保正确配置数据库连接和其他必要的设置。 3. 掌握转换步骤:熟悉kettle的各个转换步骤,如输入、输出、转换、过滤和转换等。理解每个步骤的功能和用法。 4. 数据提取和加载:学习如何使用kettle从不同数据源(如数据库、文件、Web服务)中提取数据,并将其加载到目标数据库或文件中。 5. 数据转换和清洗:掌握使用kettle进行数据转换和清洗的技巧,如数据映射、字段计算、数据过滤和去重等。 6. 调度和监控:了解如何使用kettle的作业来调度数据处理任务,并使用日志和监控功能来跟踪和分析数据处理过程。 7. 扩展和定制:研究kettle的插件机制,了解如何使用自定义插件来扩展kettle的功能,以满足特定的需求。 8. 最佳实践:遵循kettle的最佳实践,如优化转换和作业的性能、处理错误和异常情况、使用版本控制等。 9. 社区支持:加入kettle的用户社区,与其他用户交流经验和问题,获取帮助和解决方案。 希望这些建议能对你有所帮助,如果你有关于kettle的具体问题,我会尽力回答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值