使用具有不同密钥的 jq 将 json 转换为 csv

Convert json to csv using jq with different key

给定一个 JSON object 数组,我想输出一个 CSV,其中一行包含每个 object 键,其他行基于每个 object值。

输入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