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

jmespath用法总结

JMESPath(JSON.MetaExpression Syntax)是一种查询和过滤JSON文档的表达式语言。JMESPath表达式可以提取、转换和计算JSON数据,以便于处理。JMESPath表达式由路径、过滤器和投影器组成,可以非常灵活地操作JSON数据。
下面是JMESPath的一些基本用法和示例:

  1. 获取值

    • 获取数组中的第一个元素:[0]
    • 获取对象中的特定字段:field_name
    {"data": {"items": ["apple", "banana", "cherry"]}
    }
    
    data.items[0]
    

    返回:"apple"

  2. 条件过滤

    • 获取数组中所有值大于某个值的元素:[?field_name > value]
    {"data": {"numbers": [1, 2, 3, 4, 5]}
    }
    
    data.numbers[? > 3]
    

    返回:[4, 5]

  3. 投影

    • 投影对象数组中的特定字段:[].field_name
    {"data": {"people": [{"name": "Alice", "age": 25},{"name": "Bob", "age": 30}]}
    }
    
    data.people[].[name]
    

    返回:["Alice", "Bob"]

  4. 组合

    • 组合多个条件、投影和路径
    {"data": {"people": [{"name": "Alice", "age": 25},{"name": "Bob", "age": 30},{"name": "Charlie", "age": 25}]}
    }
    
    data.people[?age == 25].[name]
    

    返回:["Alice", "Charlie"]

  5. 函数

    • 使用JMESPath内置函数进行计算或操作
    {"data": {"numbers": [1, 2, 3, 4, 5]}
    }
    
    data.numbers | length(@)
    

    返回:5

  6. 管道

    • 将一个表达式应用于另一个表达式的结果
    {"data": {"people": [{"name": "Alice", "age": 25},{"name": "Bob", "age": 30},{"name": "Charlie", "age": 25}]}
    }
    
    data.people[?age == 25].name | join(", ")
    

    返回:"Alice, Charlie"

  7. 递归

    • JMESPath支持递归地处理JSON对象或数组。
    {"data": {"people": [{"name": "Alice","age": 25,"children": [{"name": "Diana","age": 5}]},{"name": "Bob","age": 30,"children": [{"name": "Eve","age": 7}]}]}
    }
    
    data.people[].[name, children[].[name]]
    

    返回:[["Alice", ["Diana"]], ["Bob", ["Eve"]]]

  8. 映射

    • 映射允许你将一个表达式应用于数组中的每个元素。
    {"data": {"numbers": [1, 2, 3, 4, 5]}
    }
    
    data.numbers | map(@ * 2)
    

    返回:[2, 4, 6, 8, 10]

  9. 排序

    • 可以根据特定字段对数组进行排序。
    {"data": {"people": [{"name": "Bob", "age": 30},{"name": "Alice", "age": 25}]}
    }
    
    data.people | sort_by(@, &age)
    

    返回:[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]

  10. 切片

    • 可以使用切片语法来获取数组的一部分。
    {"data": {"items": ["apple", "banana", "cherry", "date", "fig"]}
    }
    
    data.items[1:4]
    

    返回:["banana", "cherry", "date"]

  11. 合并

    • 可以合并多个数组或对象。
    {"data": {"items1": ["apple", "banana"],"items2": ["cherry", "date"]}
    }
    
    [data.items1, data.items2] | flatten(@)
    

    返回:["apple", "banana", "cherry", "date"]

  12. 函数链

    • 可以链式调用多个函数来处理数据。
    {"data": {"numbers": [1, 2, 3, 4, 5]}
    }
    
    data.numbers | map(@ * 2) | sort_by(@, &desc) | [0]
    

    返回:10(最大的数)

  13. 类型检查

    • JMESPath 允许你检查值的类型。
    {"data": {"values": [1, "two", true, null]}
    }
    
    data.values[?type(@) == "string"]
    

    返回:["two"]

  14. 多级投影

    • 你可以从嵌套的对象中投影多个级别。
    {"data": {"people": [{"name": "Alice","address": {"street": "123 Main St","city": "Wonderland"}},{"name": "Bob","address": {"street": "456 Elm St","city": "Builderland"}}]}
    }
    
    data.people[].[name, address.city]
    

    返回:[["Alice", "Wonderland"], ["Bob", "Builderland"]]

  15. 递归投影

    • JMESPath 允许你递归地投影嵌套结构。
    {"data": {"people": [{"name": "Alice","children": [{"name": "Diana","children": [{"name": "Eve"}]}]}]}
    }
    
    data.people[].[name, children[].[name, children[].[name]]]
    

    返回:[["Alice", ["Diana", ["Eve"]]]]

  16. 比较运算符

    • JMESPath 支持多种比较运算符,如 ==, !=, >, <, >=, <=
    {"data": {"numbers": [1, 2, 3, 4, 5]}
    }
    
    data.numbers[?(@ >= 3 && @ <= 5)]
    

    返回:[3, 4, 5]

  17. 逻辑运算符

    • JMESPath 支持逻辑运算符,如 and, or, not
    {"data": {"people": [{"name": "Alice", "age": 25},{"name": "Bob", "age": 30},{"name": "Charlie", "age": 35}]}
    }
    
    data.people[?(age > 25 and age < 35)]
    

    返回:[{"name": "Alice", "age": 25}]

  18. 索引访问

    • 你可以使用 [] 运算符来访问对象的键或数组的索引。
    {"data": {"people": [{"name": "Alice", "age": 25},{"name": "Bob", "age": 30}]}
    }
    
    data.people[0].name
    

    返回:"Alice"

  19. 更新和添加

    • 你可以使用 setadd 函数来更新或添加数据。
    {"data": {"people": [{"name": "Alice", "age": 25},{"name": "Bob", "age": 30}]}
    }
    
    data.people[0].set(age, 26)
    

    返回:[{"name": "Alice", "age": 26}, {"name": "Bob", "age": 30}]

  20. 删除

    • 你可以使用 del 函数来删除数据。
    {"data": {"people": [{"name": "Alice", "age": 25},{"name": "Bob", "age": 30}]}
    }
    
    data.people[0].del(age)
    

    返回:[{"name": "Alice"}, {"name": "Bob", "age": 30}]

JMESPath 提供了丰富的功能来处理 JSON 数据,以下是一些额外的用法和示例:
21. 聚合函数
- JMESPath 支持聚合函数,如 sum, min, max, avg 等。
json { "data": { "numbers": [1, 2, 3, 4, 5] } }
jmespath data.numbers | sum(@)
返回:15
22. 搜索函数
- JMESPath 支持搜索函数,如 search, contains, startswith, endswith 等。
json { "data": { "strings": ["apple", "banana", "cherry"] } }
jmespath data.strings[?contains(@, "a")]
返回:["apple", "banana"]
23. 正则表达式
- JMESPath 允许你使用正则表达式进行匹配。
json { "data": { "strings": ["apple", "banana", "cherry", "grape"] } }
jmespath data.strings[?regex(@, "^[a-g].*")]
返回:["apple", "banana", "cherry", "grape"]
24. 路径引用
- 你可以使用 .. 来引用父级或根级的值。
json { "data": { "people": [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30} ] } }
jmespath data.people[].[name, ..age]
返回:[["Alice", 25], ["Bob", 30]]
25. 递归搜索
- JMESPath 允许你递归地搜索对象或数组。
json { "data": { "people": [ { "name": "Alice", "children": [ { "name": "Diana", "children": [ { "name": "Eve" } ] } ] } ] } }
jmespath data..name
返回:["Alice", "Diana", "Eve"]
26. 自定义函数
- JMESPath 允许你定义自定义函数来扩展其功能。
json { "data": { "numbers": [1, 2, 3, 4, 5] } }
jmespath def add(a, b) a + b data.numbers | map(@ | add(@, 10))
返回:[11, 12, 13, 14, 15]
27. 条件表达式
- JMESPath 支持条件表达式,类似于 Python 中的三元表达式。
json { "data": { "people": [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30} ] } }
jmespath data.people[].[name, age > 25 ? "Older" : "Younger"]
返回:[["Alice", "Younger"], ["Bob", "Older"]]
28. 多级键访问
- 你可以使用 .. 来访问多级键。
json { "data": { "people": [ {"name": "Alice", "address": {"street": "123 Main St", "city": "Wonderland"}} ] } }
jmespath data.people[].[name, ..street]
返回:[["Alice", "123 Main St"]]
29. 更新嵌套结构
- 你可以使用 set 函数来更新嵌套结构。
json { "data": { "people": [ {"name": "Alice", "address": {"street": "123 Main St", "city": "Wonderland"}} ] } }
jmespath data.people[0].address.set(city, "Builderland")
返回:[{"name": "Alice", "address": {"street": "123 Main St", "city": "Builderland"}}]


http://www.mrgr.cn/news/8606.html

相关文章:

  • Spark MLlib 特征工程系列—特征转换PCA(Principal Component Analysis)
  • 8.Java基础概念-方法
  • 依赖倒置原则
  • Redis | 非关系型数据库Redis的初步认识
  • 刷题DAY17
  • 微服务 - 分布式锁的实现与处理策略
  • Telnet不止于端口测试:探索经典工具的多样化应用
  • 学习大数据DAY42 hive 分桶表
  • liteflow的组件编排
  • OpenCV仿射变换
  • GNU ARM Assembler Quick Reference
  • UEditor百度富文本后端上传文件接口
  • 如何将网站地图Sitemap提交至百度、谷歌及Bing搜索引擎
  • Nginx+Tomcat(负载均衡、动静分离)
  • 使用 SQLite 处理大量小数据库
  • 【机器学习-监督学习】双线性模型
  • RPC 运行时,第二次:发现新的漏洞
  • Linux pstree 命令详解
  • 使用maven快速生成打包文件
  • Docker快速上手