【问题标题】:How to loop through JSON objects to extract specific key values with jq如何循环遍历 JSON 对象以使用 jq 提取特定键值
【发布时间】:2019-09-07 18:58:50
【问题描述】:

我是 Bash 脚本和 jq 的新手。我正在尝试从 JSON 对象中提取键值对 nametranscription.normalized

我已经学会了如何从 name 中获取所有值的列表并分别进行规范化,但这并不是我真正想要的。

cat submission.json | jq '.documents[] .pages[] .fields[] .name, .documents[] .pages[] .fields[] .transcription.normalized'

我想知道是否需要执行某种循环,但不确定。我真的想要一个脚本,以我可以轻松转储到 CSV 文件的格式提取这两个字段。

这是 JSON 外观的示例。

{
  "id": 1,
  "state": "complete",
  "substate": null,
  "exceptions": [],
  "name": "Sender Account Number",
  "output_name": null,
  "field_definition_attributes": {
    "required": false,
    "data_type": "Account Number",
    "multiline": false,
    "consensus_required": false,
    "supervision_override": null
  },
  "transcription": {
    "raw": "1685-0441-1",
    "normalized": "168504411",
    "source": "machine_transcription",
    "data_deleted": false,
    "user_transcribed": null,
    "row_index": null
  },
  "field_image_url": "/api/v4/image/be167a88-9d1d-43bc-82b2-3d96d8c06656?start_x=0.3110429607297866&start_y=0.1052441592299208&end_x=0.5696909842243418&end_y=0.16043316955780607"
}

【问题讨论】:

    标签: json export-to-csv jq


    【解决方案1】:

    您不需要循环。 jq 可以从数组中生成 CSV。

    jq -r '.documents[].pages[].fields[] | [.name, .transcription.normalized] | @csv' file
    

    【讨论】:

    • 哦,哇,这比我当时想的要容易得多。在您的示例中,快速问题是“文件”是我文件夹中现有文件的占位符吗?当我像这样格式化您的代码时,您的代码有效:cat submit.json | jq -r '.documents[].pages[].fields[] | [.name, .transcription.normalized] | @csv' > name.csv
    • @wahiggins3 是的,它是一个占位符。 jq可以自己读取文件,cat file | jq是cat没用的用处
    猜你喜欢
    • 2018-05-03
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2014-07-22
    • 2022-06-29
    相关资源
    最近更新 更多