当前位置: 首页 > news >正文

JMESPath语言

JMESPath(JSON Matching Expression Path)

一种查询语言。

主要用于从JSON文档中检索和过滤数据。

通过写表达式提取和处理JSON数据,而无需编写复杂的代码。

功能:数据提取、过滤、转换、排序。

场景:处理API响应、数据分析、数据转换 etc。

数据提取:从复杂的JSON文档中提取所需的信息。例如,从包含多个嵌套对象和数组的JSON文档中提取特定属性。

数据过滤:基于特定条件过滤JSON数据。例如,从一个包含多个对象的数组中过滤出满足特定属性值条件的对象。

数据转换:将JSON数据转换为其他格式。例如,将一个包含多个属性的对象转换为一个只包含部分属性的新对象,或将一个数组转换为一个新的数组,其中的元素经过特定计算或操作。

数据排序:根据特定属性对JSON数据进行排序。

JMESPath — JMESPathicon-default.png?t=N7T8https://jmespath.org/

本文主要以 JMESPath Tutorial and Examples 为操作示例,还有包括一些其他常用示例:

目录

一些常用调用方式

一些常用表达式

一些常用嵌套语句


一些常用调用方式

jmespath结果备注
{
  "demo": "hello world"
}
demo"hello world"str
{
  "demo": 1
}
demo1int
{
  "demo": ["1", "2"]
}

demo / demo[*] / demo[:] / demo[]

["1","2"
]
array
{
  "demo": {
    "key": "value",
    "k": "v",
    "a": {"b": "c"}
  }
}
demo
{"key": "value","k": "v","a": {"b": "c"}
}
object
{}demonullnull

元素获取

jmespath结果备注
{
  "demo": {
    "key": "value",
    "k": "v",
    "a": {"b": "c"}
  }
}
demo.key / demo."key""value"
同上demo.a.b"c"
同上demo.[key, k]
[
"value","v"
]
同上demo.{"k1": key, "k2": k} / demo.{k1: key, k2: k}
{"k1": "value","k2": "v"
}
{"d":{}}d{}
{
  "demo": [1, 2, 3]
}
demo[0] / demo[:1]1
{"d":[]}d[]
同上demo[2:]3slice:[start:stop:step]或[start:stop],step为负则倒取
同上demo[3]null
同上demo[1:3][2, 3]slice
同上demo[::-1]
[3, 2, 1]
slice
同上demo[::2]
[1,3]
slice

一些常用表达式

jmespath结果备注
{
  "demo": [1, 2, 3]
}
to_string(demo)
"[1,2,3]"
转字符串 to_string(打平显示使用)
同上length(demo)3长度 length
同上type(demo)
"array"
{
  "demo": {
    "key": "value",
    "k": "v",
    "a": {"b": "c"}
  }
}
to_string(demo)

"{\"key\":\"value\",\"k\":\"v\",\"a\":{\"b\":\"c\"}}"

同上length(demo)3
同上type(demo)
"object"
{"a": "1.1"}to_number(a)1.1to number转数字
{
  "demo": [1, 2, 19]
}
max(demo)19max最大值
同上min(demo)1min最小值
同上avg(demo)
7.333333333333333
avg平均数(显示长度控制在16位)
同上sum(demo)22sum和
同上hhh || demo[0]1||   
同上demo[1] || demo[2]2
同上demo[1] && demo[2]19&& 
{
  "a": [
    {
      "b1": "James",
      "b2": "d",
      "c": 30
    },
    {
      "b1": "Jacob",
      "b2": "e",
      "c": 35
    },
    {
      "b1": "Jayden",
      "b2": "f",
      "c": 25
    }
  ]
}
a[?c > `18`]
[{"b1": "Jacob","b2": "e","c": 20},{"b1": "Jayden","b2": "f","c": 23}
]
条件选择 filter
同上a[?c > `18`].{b1: b1, age: c}
[{"b1": "Jacob","age": 20},{"b1": "Jayden","age": 23}
]
同上a[?c==`18`]
[{"b1": "James","b2": "d","c": 18}
]
同上a[?c==`18`].{b1: b1, age: c}
[{"b1": "James","age": 18}
]
​​​​​​​
同上a[?c==`20`].[b1, b2]
[["Jacob","e"]
]
同上a[?c==`20`].[b1, b2] | [] / a[?c==`20`].[b1, b2] | [0]
["Jacob","e"
]

管道表达式。

 | [] 或 | [0]的写法能消除嵌套下的外[]

同上a | [0] / a | []
{"b1": "James","b2": "d","c": 18
}
同上a | [1]
{"b1": "Jacob","b2": "e","c": 20
}
{"a":[{"b1":"詹姆斯","b2":"d","c":30},{"b1":"雅各布","b2":"e","c":35},{"b1":"杰登","b2":"f","c":25}]}sort_by(a, &c)
[{"b1": "杰登","b2": "f","c": 25},{"b1": "詹姆斯","b2": "d","c": 30},{"b1": "雅各布","b2": "e","c": 35}
]
sort_by排序
同上join(' ', [a[0].b1, a[1].b1, a[2].b1])
"詹姆斯 雅各布 杰登"
join字符串拼接
{
  "a": [
    "foo",
    "foobar",
    "barfoo",
    "bar",
    "barbaz",
    "barfoobaz"
  ]
}
a[?contains(@, 'foo') == `true`]
["foo","foobar","barfoo",barfoobaz]
字符匹配 contains与匿名@

一些常用嵌套语句

嵌套调用

jmespath结果备注
{"a": {
    "c": [
      {"d": [0, [1, 2]]}
    ]
}}
a.c[0].d[1][0]1
{
  "a": [
    {
      "b1": "James",
      "b2": "d",
      "c": 30
    },
    {
      "b1": "Jacob",
      "b2": "e",
      "c": 35
    },
    {
      "b1": "Jayden",
      "b2": "f",
      "c": 25
    }
  ]
}
a[*].b1 / a[].b1 / a[:].b1
["James","Jacob","Jayden"
]
同上a[*].[b1, b2]

[

  ["James", "d"],

  ["Jacob", "e"],

  ["Jayden", "f"]

]

同上a[*].[*]

[

  [["James", "d", 30]],

  [["Jacob", "e", 35]],

  [["Jayden", "f", 25]]

]

同上a[*].{b1: b1, "b2": `1`}
[{"b1": "James","b2": 1},{"b1": "Jacob","b2": 1},{"b1": "Jayden","b2": 1}
]
同上a[::2].{b1: b1, "b2": `1`}
[{"b1": "James","b2": 1},{"b1": "Jayden","b2": 1}
]
{
    "a": {
        "a1": {
            "b1": "James",
            "b2": "d",
            "c": 30
        },
        "a2": {
            "b1": "Jacob",
            "b2": "e",
            "c": 35
        },
        "a3": {
            "b1": "Jayden",
            "b2": "f",
            "c": 25
        }
    }
}
a.*.c
[30,35,25
]
同上a.*.*

[

  ["James", "d", 30],

  ["Jacob", "e", 35],

  ["Jayden", "f", 25]

]

​​​​​​​

http://www.lryc.cn/news/263325.html

相关文章:

  • 【C++高阶(七)】C++异常处理的方式
  • 在Idea中创建基于工件的本地服务
  • 十六、YARN和MapReduce配置
  • 自己动手写编译器:语法解析的基本原理
  • VS Code解决乱码
  • 宝塔Linux:部署His医疗项目通过jar包的方式
  • Vim命令大全(超详细,适合反复阅读学习)
  • 爬虫持久化保存
  • 统一大语言模型和知识图谱:如何解决医学大模型-问诊不充分、检查不准确、诊断不完整、治疗方案不全面?
  • 读写分离之同步延迟测试
  • SpringBoot+OCR 实现PDF 内容识别
  • Go和Java实现抽象工厂模式
  • 深入理解Java虚拟机---内存分配
  • 计算机网络2
  • jenkins-Generic Webhook Trigger指定分支构建
  • 源码解析8-QSS原理-案例-Qt的qss特殊设置多个子控件的颜色与伪状态
  • Nginx+Tomcat实现负载均衡和动静分离
  • linux系统的u盘/mmc/sd卡等的支持热插拔和自动挂载行为
  • 使用Python将OSS文件免费下载到本地:项目分析和准备工作
  • 从Gitee克隆项目、启动方法
  • 不用再找了,这是大模型实践最全的总结
  • QT 记录
  • 智能优化算法应用:基于黑寡妇算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • VSCode 常用的快捷键和技巧系列(2)
  • 【Hadoop】执行start-dfs.sh启动hadoop集群时,datenode没有启动怎么办
  • 计算机网络(四)
  • 非递归实现的快速排序
  • windows 安装jenkins
  • SQL进阶理论篇(十二):InnoDB中的MVCC是如何实现的?
  • SpringCloudAliBaba篇之Seata:分布式事务组件理论与实践