赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 日志服务
  4. 操作指南
  5. 数据加工
  6. 数据加工(旧版)
  7. 数据加工语法
  8. 通用参考
  9. JMES语法

JMES语法

  • 通用参考
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

本文主要介绍JMES的常用语法和示例。

JMES是一个增强型的JSON查询计算语言,不仅可以对JSON数据进行提取,还可以做计算与转换。关于JMES语法的详细介绍请参见JMES Tutorial。

数据加工中的json_select、e_json、e_split函数支持通过JMES提取字段或JSON表达式的值,或者通过JMES计算特定的值。其用法为:

json_select(值, "jmes表达式", ...)
e_json(字段名, jmes="jmes表达式", ...)
e_split(字段名, ... jmes="jmes表达式", ...)

函数的具体用法请参见json_select、e_json和e_split。

通过字段的key获取值

  • 原始日志

    json_data: {"a":"foo","b":"bar","c":"baz"}
  • 加工语法

    # 获取JSON表达式中a的值。
    e_set("a1", json_select(v("json_data"), "a"))
    # 获取JSON表达式中b的值。
    e_set("b1", json_select(v("json_data"), "b"))
    # 获取JSON表达式中c的值。
    e_set("c1", json_select(v("json_data"), "c"))
  • 加工结果

    a1:foo
    b1:bar
    c1:baz
    json_data:{"a":"foo","b":"bar","c":"baz"}

通过层级访问获取值

  • 原始日志

    json_data:{"a": {"b":{"c":{"d":"value"}}}}
  • 加工语法

    # 获取JSON表达式中d的值。
    e_set("e", json_select(v("json_data"), "a.b.c.d"))
  • 加工结果

    e:value
    json_data:{"a": {"b":{"c":{"d":"value"}}}}

通过切片操作获取值

  • 原始日志

    json_data:{"a": ["b", "c", "d", "e", "f"]}
  • 加工语法

    # 获取字段a中从切片2开始的值。切片0值为b,切片1值为c。
    e_set("key", json_select(v("json_data"), "a[2:]"))
  • 加工结果

    json_data:{"a": ["b", "c", "d", "e", "f"]}
    key:["d", "e", "f"]

多种用法综合使用

  • 原始日志

    json_data:{"a": {"b": {"c": [{"d": [0, [1, 2]]}, {"d": [3, 4]}]}}}
  • 加工语法

    # c[0]表示{"d": [0, [1, 2]]}部分;d[1]表示[1, 2]]。返回值为1。
    e_set("key", json_select(v("json_data"), "a.b.c[0].d[1][0]"))
  • 加工结果

    json_data:{"a": {"b": {"c": [{"d": [0, [1, 2]]}, {"d": [3, 4]}]}}}
    key:1

通过投影获取值

  • 示例1

    • 原始日志

      json_data:{"people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"},{"first": "Jayden", "last": "f"},{"missing": "different"}],"foo": {"bar": "baz"}}
    • 加工语法

      # 获取people列表中first的值。
      e_set("key", json_select(v("json_data"), "people[*].first"))
    • 加工结果

      json_data:{"people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"},{"first": "Jayden", "last": "f"},{"missing": "different"}],"foo": {"bar": "baz"}}
      key:["James", "Jacob", "Jayden"]
  • 示例2

    • 原始日志

      json_data:{"ops": {"functionA": {"numArgs": 2},"functionB": {"numArgs": 3},"functionC": {"variadic": true}}}
    • 加工语法

      # 获取ops中numArgs的值。
      e_set("key", json_select(v("json_data"), "ops.*.numArgs"))
    • 加工结果

      json_data:{"ops": {"functionA": {"numArgs": 2},"functionB": {"numArgs": 3},"functionC": {"variadic": true}}}
      key:[2, 3]
  • 示例3

    • 原始日志

      json_data:{"machines": [{"name": "a", "state": "running"},{"name": "b", "state": "stopped"},{"name": "c", "state": "running"}]}
    • 加工语法

      # 获取machines中running状态的name值。
      e_set("key", json_select(v("json_data"), "machines[?state=='running'].name"))
    • 加工结果

      json_data:{"machines": [{"name": "a", "state": "running"},{"name": "b", "state": "stopped"},{"name": "c", "state": "running"}]}
      key:["a", "c"]

多值选取

  • 原始日志

    json_data:{"people": [{"name": "a","state": {"name": "up"}},{"name": "b","state": {"name": "down"}}]}
  • 加工语法

    # 获取people的name及state值。
    e_set("key", json_select(v("json_data"), "people[].[name, state.name]"))
  • 加工结果

    json_data:{"people": [{"name": "a","state": {"name": "up"}},{"name": "b","state": {"name": "down"}}]}
    key:[["a", "up"], ["b", "down"]]

计算数组长度

  • 原始日志

    json_data:{"a": ["b", "c", "d", "e", "f"]}
  • 加工语法

    # 获取数组a的长度。
    e_set("key", json_select(v("json_data"), "length(a)"))
    # 获取数组a的长度,若length(a) > 0, 设置no-empty字段为true。
    e_if(json_select(v("json_data"), "length(a)", default=0), e_set("no-empty", true))
  • 加工结果

    json_data:{"a": ["b", "c", "d", "e", "f"]}
    key:5
    json_data:{"a": ["b", "c", "d", "e", "f"]}
    no-empty:true
相关文章

标准编码格式 2025-04-22 10:54

本文列举了日志服务中支持的标准编码格式。

查询字符串语法 2025-04-22 10:54

查询字符串语法是SLS DSL中用于快速过滤数据的语法,可以简化条件判断。本文介绍查询字符串的通用语法规则。 函数列表

字段提取模式 2025-04-22 10:54

本文介绍函数中字段提取模式参数的取值以及含义。 相关函数 以下为使用字段提取模式mode参数的函数列表及其参数默认值。

正则表达式 2025-04-22 10:54

本文介绍正则表达式的匹配方式以及特殊字符的转义处理。 完全匹配 正则表达式的值与字符串完全一致,则是完全匹配。例如

GROK模式参考 2025-04-22 10:54

GROK是一种采用组合多个预定义的正则表达式,用来匹配分割文本并映射到关键字的工具。通常用来对日志数据进行处理。本文档主要介绍GROK的模式说明以及常用语法。 GROK模式及说明如下表所示。

JMES语法 2025-04-22 10:54

本文主要介绍JMES的常用语法和示例。 JMES是一个增强型的JSON查询计算语言,不仅可以对JSON数据进行提取,还可以做计算与转换。关于JMES语法的详细介绍请参见JMES Tutorial。

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号