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.mzph.cn/news/231215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7安装Docker及添加阿里云镜像加速详细教程

Docker官方安装教程网站:Install Docker Engine on CentOS | Docker Docs 具体流程如下: 1.确定你是CentOS7及以上版本 cat /etc/redhat-release 2.yum安装gcc相关 yum -y install gcc yum -y install gcc-c 3.安装需要的软件包 3.1安装docker引擎…

MetaSploit工具的使用

在命令行输入:msfconsole 启动msf msfconsole 另外的方式 msfdb init msfdb run 查看数据库连接状态 db_status 扫描端口并存储 db_nmap 查看扫描到的数据信息 services MSF常用的模式和命令 搜索模块 search 模块名字 使用模块 use 编号 查看模块使用 sho…

对偶问题笔记(1)

目录 1 从 Lagrange 函数引入对偶问题2. 强对偶性与 KKT 条件3. 对偶性的鞍点特征 1 从 Lagrange 函数引入对偶问题 考虑如下优化问题 { min ⁡ f 0 ( x ) s . t f i ( x ) ≤ 0 , i 1 , ⋯ , p , h j ( x ) 0 , j 1 , ⋯ , q , x ∈ Ω , \begin{align} \begin{cases}\min…

在linux上基于shell自动部署Java项目

一,安装git yum list git 列出git安装包 yum install git 在线安装git 使用 git -varsion 查看是否安装成功 安装成功 二, Git克隆代码 git clone 远程仓库地址 三,创建shell脚本 touch shell.sh shell脚本 #!/bin/sh echo echo 自动…

健康手表数据洞察台

健康手表数据洞察台 1. 背景介绍2. 数据获取与处理3. Django平台搭建4. 数据可视化5. 整体数据分析6. 数据监控与紧急警报7. 用户界面优化8. 创新点结语 1. 背景介绍 在当今健康意识不断提升的社会,人们越来越关注身体健康。本文将介绍如何使用Pandas进行数据分析&…

NTC和温度的关系

一、NTC介绍 NTC(nagative temperature coefficient)负温度系数的热敏电阻。随着温度的升高,电阻越来越小 二、NTC和温度的关系 生产NTC的厂家会提供一个RT表格,里面记录了温度和电阻的关系,他们的关系是一一对应的…

C# 使用FluentHttpClient请求WebApi

写在前面 FluentHttpClient 是一个REST API 异步调用 HTTP 客户端,调用过程非常便捷,采用流式编程,可以将所有请求所需的参数一次性发送,并直接获取序列化后的结果。 老规矩从NuGet上安装该类库: 这边一定要认准是 P…

React系列:配置@别名路径并配置联想

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🔥网站…

汽车火花塞行业分析:全球市场需求量约为26.3亿个

在汽车日常保养里,更换火花塞算是比较常见的一种,爱车懂车的车主们都非常清楚火花塞对于汽车的重要性,可以说火花塞直接影响到发动机的运作,决定了汽车能否顺利启程。 火花塞(sparkplug),俗称火咀,它的作用是把高压导线(火嘴线)送来的脉冲高压电放电&…

zkSend — — 在Sui上发红包像发电子邮件一样简单

*12月14日,知名区块链媒体平台The Block发表了这篇关于对Mysten Labs联合创始人Adeniyi Abiodun的采访,文中“我们”指代该媒体,数据均为截止撰写文章时数据,以下是正文。 两年前,当五名前Facebook工程师创立Mysten L…

MySQL数据库 函数

目录 函数概述 字符串函数 数值函数 日期函数 流程函数 函数概述 函数是指一段可以直接被另一段程序调用的程序或代码。也就意味着,这一段程序或代码在MysQL中已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即…

如何提高股票交易速度?极速交易哪家好?

极速交易模式是一种交易方式,它以最短的时间进行快速交易。这种模式通常用于贵金属、外汇、原油、期权等金融产品的交易。 在极速交易模式中,交易者可以在最短时间内进行买卖操作,从而快速获取利润。这种交易方式通常需要高超的技术和经验&a…

【03】GeoScene创建海图或者电子航道图数据

1 配置Nautical属性 1.1 管理长名称 长名称(LNAM)是一个必要的对象标识符,是生产机构(AGEN)、要素识别号码(FIDN)和要素识别子项(FIDS)组件的串联。这三个子组件用于数…

【Spring】09 BeanClassLoaderAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点,其中之一就是 Bean 生命周期中的回调接口。本文将聚焦于其中的一个接口 BeanClassLoaderAware,介…

11889个字带你彻底弄清tcp/ip协议栈

tcpip协议栈 tcpip模型以太网协议ARP地址解析协议TCP协议 tcpip模型 OSI模型linux tcpip模型常用协议网络设备应用层应用层telnet/DHCP/TFTP/FTP/MQTT/NFS/DNS/FTP/SNMP表示层会话层传输层传输层TCP/UDP四层交换机网络层网络层IP/ICMP/IGMP/ARP路由器,三层交换机…

01|LangChain系统安装和快速入门

01|LangChain系统安装和快速入门 什么是大语言模型 大语言模型是一种人工智能模型,通常使用深度学习技术,比如神经网络,来理解和生成人类语言。这些模型的“大”在于它们的参数数量非常多,可以达到数十亿甚至更多&am…

日本药典数据库

日本药典(Japanese Pharmacopoeia,简称JP),对于药品研究人员来说,日本药典查询可以提供药品标准的参考,设定研究指标,支持药物注册和上市,以及了解行业趋势和发展。这些信息对于研究…

找出一个二维数组中的鞍点

找出一个二维数组中的鞍点&#xff0c;即该位置上的元素在该行上的最大、在该列上最小。也有可能没有鞍点。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() {int a[10][10] { 0 };int n 0, m 0;int i 0, j 0;printf("请输入这个数组有n行m列…

Yapi详细安装过程(亲测可用)

1. 前置条件 1、Git 2、NodeJs&#xff08;7.6&#xff09; 3、Mongodb&#xff08;2.6&#xff09; 2. NodeJs的安装 1、获取资源 curl -sL https://rpm.nodesource.com/setup_8.x | bash - 2、安装NodeJS yum install -y nodejs 3、查看NodeJs和Npm node -v npm -v…

【数据结构复习之路】图(严蔚敏版)两万余字超详细讲解

专栏&#xff1a;数据结构复习之路 复习完上面四章【线性表】【栈和队列】【串】【数组和广义表】【树和二叉树】&#xff0c;我们接着复习 图&#xff0c;这篇文章我写的非常详细且通俗易懂&#xff0c;看完保证会带给你不一样的收获。如果对你有帮助&#xff0c;看在我这么辛…