jmespath(2)投影Projections

本文详细介绍了JMESPath中的投影操作,包括列表投影、切片投影、对象投影、展平投影和过滤投影。投影是JMESPath的核心特性,允许对元素集合应用表达式。文章通过实例解释了各种投影的使用和注意事项,如如何获取嵌套对象的特定值、如何进行切片和过滤等。
摘要由CSDN通过智能技术生成

投影

投影是JMESPath的关键特性之一。它允许您将表达式应用于元素集合。有五种投影:

  • 列表投影
  • 切片投影
  • 对象投影
  • 展平投影
  • 过滤投影

处理投影需要注意的点

  • 投影分为两个步骤。左侧(LHS)创建一个初始值的JSON数组。投影的右侧(RHS)是要为左侧创建的JSON数组中的每个元素投影的表达式。在计算左侧和/或右侧时,每个投影类型的语义略有不同。
  • 如果投射到单个数组元素上的表达式的结果为null,则从收集的结果集中忽略该值。
  • 可以使用管道表达式停止投影(稍后讨论)。
  • 列表投影仅对JSON数组有效。如果值不是列表,则表达式的结果为null。

写法说明

  • []:将子列表展平到父列表中
  • .:取字典
  • *:遍历每个元素

列表投影

在一个列表中嵌套了字典,而且每一个元素都是一个json对象,它有2个key键,分别是first、last,如果你想拿到first下的所有value怎么办呢?

import jmespath


dic_1 = {
  "people": [
    {"first": "James", "last": "d"},
    {"first": "Jacob", "last": "e"},
    {"first": "Jayden", "last": "f"},
    {"missing": "different"}
  ],
  "foo": {"bar": "baz"}
}
path = jmespath.search("people[*].first", dic_1)
print(path)

# 运行结果
['James', 'Jacob', 'Jayden']

在上面的示例中,people[*]代表people下所有的元素,people[*].first代表people下所有的元素中获取key为first的元素值,结果被收集到一个JSON数组中,并作为表达式的结果返回
虽然people数组中有4个元素,但是最后一个{"missing": "different"}的值为null,并不会将null值添加到收集的结果数组中
还有,列表投影仅对列表有效,如果值不是列表,比如是对象,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值