【问题标题】:JQ - Converting json to csv - "Multi-levels"JQ - 将 json 转换为 csv - “多级”
【发布时间】:2022-01-01 05:04:12
【问题描述】:

我正在尝试通过 jq 将 json 对象转换为 csv。这是json结构:

{
  "totalCount": 4440,
  "data": [
    {
      "company": {
        "name": "My_company_name",
        "countryCode": "US",
        "portfolioName": "My_portfolio"
      },
      "eventDate": "2021-11-22T00:00:00",
      "newValue": null,
      "oldValue": null,
      "ruleCode": 704,
      "ruleName": "New Accounts",
      "summary": "Explanations..."
    },
    {
      "company": {
        "name": "My_company_name 2",
        "countryCode": "UK",
        "portfolioName": "My_portfolio"
      },
      "eventDate": "2021-10-22T00:00:00",
      "newValue": null,
      "oldValue": null,
      "ruleCode": 701,
      "ruleName": "Hello",
      "summary": "otherExplanations..."    
      }
      ...
    ]
}

对于“第一级”的数据,我没有问题:

jq -r '.data | map({eventDate, ruleCode, ruleName, summary, oldValue, newValue}) | (first | keys_unsorted) as $keys | map([to_entries[] | .value]) as $rows | $keys,$rows[] | @csv' input.json > output.csv

但我想添加例如公司名称和国家代码,但我不知道这样做,因为这个数据之王在第二个“级别”。

我想得到类似的东西:

"eventDate","ruleCode","ruleName","summary","oldValue","newValue","companyName", "companyCountryCode"
"2021-11-22T00:00:00",704,"New Accounts","Explanations...",,,"My_company_name", "US"
"2021-11-22T00:00:00",701,"Hello","otherExplanations...",,,"My_company_name 2", "UK"

你能帮我吗?

谢谢

【问题讨论】:

  • 请添加您认为可以翻译成的 csv 格式。
  • 完成。对于 csv 标头,如果更容易,它可以是“name”和“countryCode”(而不是“companyName”、“companyCountryCode”)。谢谢:)

标签: json csv jq export-to-csv


【解决方案1】:

如果您不介意,我添加了一个. 来将顶级标题与子标题分开以使事情变得更容易(即company.namecompany.countryCode):

jq --raw-output '[
  "eventDate",
  "ruleCode",
  "ruleName",
  "summary",
  "oldValue",
  "newValue",
  "company.name",
  "company.countryCode"
] as $h
| $h, (.data[] | [getpath($h[] / ".")])
| @csv' 
"eventDate","ruleCode","ruleName","summary","oldValue","newValue","company.name","company.countryCode"
"2021-11-22T00:00:00",704,"New Accounts","Explanations...",,,"My_company_name","US"
"2021-10-22T00:00:00",701,"Hello","otherExplanations...",,,"My_company_name 2","UK"

Demo

【讨论】:

  • 谢谢!这是完美的。
猜你喜欢
  • 2022-06-13
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
相关资源
最近更新 更多