json - 使用具有不同键的 jq 将 json 转换为 csv

标签 json linux ubuntu command jq

给定一个 JSON 对象数组,我想输出一个 CSV,其中一行包含每个对象键,其他行基于每个对象值。
输入的json是:

{
  "PCID000": {
    "OSmodle": "LINUX",
    "IEversion": "2.15.0",
    "hardwareUSB": [
      "Card reader",
      "keyboard"
    ],
    "OrderStatus": "01"
  },
  "PCID999": {
    "OSmodle": "LINUX",
    "OSversion": "4.0",
    "hardwareUSB": [],
    "OrderStatus": "01"
  }
}
输出看起来像这样。 header 可以硬编码。
PCID,OSmodle,OSversion,IEversion,hardwareUSB, OrderStatus
"PCID000","LINUX",,"2.15.0","Card reader&keyboard","01"
"PCID999","LINUX","4.0",,"01

最佳答案

您可以使用 to_entries转换对象的函数,例如 {"a": 1, "b": 2}到键值对象数组,例如 [{"key": "a", "value": 1}, {"key": "b", "value": 2}] .然后映射它以选择关键值和感兴趣的部分。
jq 脚本如下所示:

to_entries | map([
    .key,
    .value.OSmodle,
    .value.OSversion,
    .value.IEversion,
    (.value.hardwareUSB | join("&")),
    .value.OrderStatus])
| ["PCID", "OSmodle", "OSversion", "IEversion", "hardwareUSB", "OrderStatus"], .[]
| @csv
输出(带有 -r ):
"PCID","OSmodle","OSversion","IEversion","hardwareUSB","OrderStatus"
"PCID000","LINUX",,"2.15.0","Card reader&keyboard","01"
"PCID999","LINUX","4.0",,"","01"
jqplay

关于json - 使用具有不同键的 jq 将 json 转换为 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68996590/

相关文章:

ubuntu - Ubuntu上的Jenkins,在Windows机器上触发exe文件

ruby-on-rails - 无法使用 Capistrano 删除旧版本

json - jq - 将复杂的 JSON 解析为字符串

java - 如何读取 linkedtreemap [GSON] 类型的 json 数据?

json - 以 JsonFormat 模式编写正则表达式

python - 如何在Python中存储嵌套数据?

c - Visual Studio 和 GCC - 编译器差异

apache - 将 var/www 更改为其他内容

浏览器访问文档根目录中的 php 文件,所有者和组作为根目录

linux - 大括号后的额外字符