【问题标题】:Use JQ to output JSON nested object into array, before conversion to CSV在转换为 CSV 之前,使用 JQ 将 JSON 嵌套对象输出到数组中
【发布时间】:2019-11-22 13:08:00
【问题描述】:

使用 JQ 将 JSON 嵌套对象输出到数组中,然后转换为 CSV

问题是先前解决方案的扩展:

Use JQ to parse JSON array of objects, using select to match specified key-value in the object element, then convert to CSV


数据来源:

{
  "Other": [],
  "Objects": [
    {
      "ObjectElementName": "Test 123",
      "ObjectElementArray": [],
      "ObjectNested": {
        "0": 20,
        "1": 10.5
      },
      "ObjectElementUnit": "1"
    },
    {
      "ObjectElementName": "Test ABC 1",
      "ObjectElementArray": [],
      "ObjectNested": {
        "0": 0
      },
      "ObjectElementUnit": "2"
    },
    {
      "ObjectElementName": "Test ABC 2",
      "ObjectElementArray": [],
      "ObjectNested": {
        "0": 15,
        "1": 20
      },
      "ObjectElementUnit": "5"
    }
  ],
  "Language": "en-US"
}

JQ 命令提取 [FAILS]

jq -r '.Objects[]
  | select(.ObjectElementName | test("ABC"))
  | [.ObjectElementName,.ObjectNested,.ObjectElementUnit]
  |@csv' input.json

需要输出 CSV(或变体,只要 ObjectNested 出现在 CSV 中的单个列中)

ObjectElementName,ObjectNested,ObjectElementUnit
"Test ABC 1","0:0","2"
"Test ABC 2","0:15,1:20","5"

【问题讨论】:

    标签: json export-to-csv jq


    【解决方案1】:

    使用keys_unsorted 和字符串插值,很容易将ObjectNested 转换为您想要的形式:

    .Objects[] | select(.ObjectElementName | index("ABC")) | [
        .ObjectElementName,
        ([.ObjectNested | keys_unsorted[] as $k | "\($k):\(.[$k])"] | join(",")),
        .ObjectElementUnit
    ] | @csv
    

    【讨论】:

    • @RavinderSingh13 谢谢,但我在 jq 中不是 太好。然而,高峰是;他已经写了一篇很棒的文章,here is the link。他的语言有点太专业了,但这仍然比我以我目前的知识和英语技能写下来的任何东西都要好。
    猜你喜欢
    • 2021-02-27
    • 2022-08-14
    • 1970-01-01
    • 2020-05-06
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    相关资源
    最近更新 更多