【问题标题】:Converting JSON Array to object using JQ使用 JQ 将 JSON 数组转换为对象
【发布时间】:2022-10-07 19:14:03
【问题描述】:

我想寻求帮助。如何将数组传输到一个列表。 我的输入是

[
  {
    "PartNumber": "5SD30104GN114",
    "ClassificationNo": "500001",
    "StringValue": "L0035WSGE",
    "Field": "95001"
  },
  {
    "PartNumber": "5SD30104GN114",
    "ClassificationNo": "500001",
    "StringValue": "",
    "Field": "95002"
  }
]

我喜欢期待这个

[
  {
    "PartNumber": "5SD30104GN114",
    "ClassificationNo": "500001",
    "95001": "L0035WSGE",
    "95002": "",
  }
]

我能怎么做 ? 我试过用

| .[] | [.Part Number, .Classification No, .String Value, .Field]

但是再次生成数组

[
  "5SD30104GN114",
  "500001",
  "L0035WSGE",
  "95001"
]
[
  "5SD30104GN114",
  "500001",
  "",
  "95002"
]

【问题讨论】:

    标签: jq


    【解决方案1】:

    您可以使用 group_by 来制作匹配 ID 的集群(我假设 .PartNumber 和 .ClassificationNo 一起制作一个唯一的 ID),然后在每个集群中,从第一项中获取 ID 字段(都具有相同的 ID 字段),并通过将所有项目的值转换为可与from_entries 一起使用的键值结构将其转换为对象,从而将其添加到其中:

    group_by([.PartNumber, .ClassificationNo]) | map(
      (first | {PartNumber, ClassificationNo}) +
      (map({key: .Field, value: .StringValue}) | from_entries)
    )
    

    Demo

    除了from_entries,您还可以使用INDEX 创建具有正确字段的对象,但随后需要将值缩减为仅包含正确的值:

    group_by([.PartNumber, .ClassificationNo]) | map(
      (first | {PartNumber, ClassificationNo}) +
      (INDEX(.Field) | .[] |= .StringValue)
    )
    

    Demo

    [
      {
        "PartNumber": "5SD30104GN114",
        "ClassificationNo": "500001",
        "95001": "L0035WSGE",
        "95002": ""
      }
    ]
    

    【讨论】:

      猜你喜欢
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多