开发者社区 问答 正文

JSON查询表达式(JMESPath),用于从嵌套的字典列表中移除键/值

我在JSON中有下面的数据结构,这是一个字典,其中每个元素都是一个字典列表。

{ " 383 e 36d 1-32e 5-4705-8271-fa5e 9 e2ad 538 ":[{ "标签":"布拉"、"组标签":"组_a "、" id ":" id _布拉" },{ "标签":"布洛"、"组_标签":"组_b "、" id ":" id _布洛" } ]," 38 b 8293 c-00 C4-4 BCF-91eb-440 da 656 c 653 ":[{ "...}

我需要一个JMESPath查询表达式以将其转换为:

{ " 383 e 36d 1-32e 5-4705-8271-fa5e 9 e2ad 538 ":[{ " label ":" blah "、" group_label": "group_a "、}、{ "label": "bloh "、" group_label": "group_b "、} ]、" 38 b 8293 c-00 C4-4 BCF-91eb-440 da 656 c 653 ":[{ " label ":" BIM "、" group_label": "group...}

基本上保持相同的结构,但去掉了编号每个条目的关键字

展开
收起
1128944438887630 2019-11-29 21:26:35 993 分享 版权
阿里云 AI 助理回答

JMESPath 查询表达式主要用于提取和操作JSON数据。根据你的需求,你希望保留原始的键结构,并且对每个子字典中的键进行重命名以及移除特定的键(例如"id")。但是需要注意的是,JMESPath本身并不直接支持修改字段名称或者删除特定字段的操作,它主要用于查询和筛选数据。

然而,你可以通过选择性地投影你需要的字段来间接实现这个需求。以下是一个尝试性的方法,用于重新映射并过滤你提供的JSON结构中的字段:

{
  "*": [
    {
      "label": `@.标签`,
      "group_label": `@.组标签`
    }
  ]
}

但请注意,上面的表达式是不完全正确的,因为JMESPath不支持动态键名(如"*"所示)直接与数组投影结合使用。在实际应用中,处理这样的转换可能需要编程语言中的循环和条件判断逻辑,而不是仅依赖于JMESPath。

如果你是在使用阿里云的产品,比如函数计算(Function Compute),你可以编写一个自定义函数或脚本(如Python、Node.js等),利用对应的JSON处理库来完成这种复杂的转换逻辑。例如,在Python中,你可以很容易地遍历并修改JSON对象的结构。

这里提供一个简单的Python示例代码,展示如何实现你的需求:

import json

data = {
    # 你的原始JSON数据
}

def transform_data(input_data):
    output_data = {}
    for key, value_list in input_data.items():
        output_data[key] = [{"label": item["标签"], "group_label": item["组标签"]} for item in value_list]
    return output_data

transformed_data = transform_data(data)
print(json.dumps(transformed_data, indent=2))

这段代码会遍历输入的JSON数据,为每个子项创建一个新的字典,只包含你指定的“标签”和“组标签”字段,并以新的结构返回。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答