首页 > 解决方案 > 如何将 JSON 多值输出转换为正确的 JSON 格式?

问题描述

我正在尝试将以下输出转换为有效的 json 输出。无法使用 shell 脚本解决这个问题。
电流输出:

{ “adapter Type” : “Pass” , “Result” : “ 
    ABCD/AAZZ
    ABCD/AHAG” }, 
 { “Adapter Slot” : “Pass” , “Result” : “
    PCI Slot 3
    PCI Slot 2” }, 
 { “WWN” : “Pass” , “Result” : “ 
    10:01:02:90
    10:02:03:90” }

预期输出(json):

{
    "CUT Sheet ": [{
        "Host Adapter Type": "ABCD/AAZZ",
        "Adapter Physical Location/Slot": "PCI Slot 3",
        "HBA WWN": "10:01:02:90"
    }, {
        "Host Adapter Type": "ABCD/AHAG",
        "Adapter Physical Location/Slot": "PCI Slot 2",
        "HBA WWN": "10:02:03:90"
    }]
}

是否可以转换?有人可以提供解决方案。

标签: arraysjsonshellsh

解决方案


我错过了当前输出中的括号和结果之间的换行符(可能是剪切和粘贴问题),但是输出:

[   {
    "adapterType": "Pass",
    "Result": "ABCD/AAZZ\nABCD/AHAG"   },   {
    "AdapterSlot": "Pass",
    "Result": "PCI Slot 3\nPCI Slot 2"   },   {
    "WWN": "Pass",
    "Result": "10:01:02:90\n10:02:03:90"   } ]

重定向到:

| jq 'map_values(.Result | split("\n")) | 转置 | map( {"主机适配器类型":.[0], "适配器物理位置/插槽":.[1], "HBA WWN":.[2]})' | jq -n '."剪切表" |= [输入]'

生成输出:

{
  "CUT Sheet ": [
    [
      {
        "Host Adapter Type": "ABCD/AAZZ",
        "Adapter Physical Location/Slot": "PCI Slot 3",
        "HBA WWN": "10:01:02:90"
      },
      {
        "Host Adapter Type": "ABCD/AHAG",
        "Adapter Physical Location/Slot": "PCI Slot 2",
        "HBA WWN": "10:02:03:90"
      }
    ]
  ]
}

你需要安装 jq


推荐阅读