将CSV转换为嵌套的JSON

时间:2017-07-31 16:06:28

标签: python json csv

我正在尝试将以下CSV转换为JSON。任何帮助将不胜感激。

CSV文件样本(文件将包含许多具有网络,主机属性的网络组)

Type,Value ,Name
Network,10.0.0.0/8,network_group_3
Host,10.0.0.27,network_group_3
Host,10.0.0.28,network_group_3
Network,10.10.10.0/24,network_group_4
Network,10.10.20.0/24,network_group_4
Host,10.10.10.6,network_group_4

需要JSON的输出

netgroup =
 "literals": [
    {
      "type": "Network",
      "value": "10.0.0.0/8"
    },
    {
      "type": "Host",
      "value": "10.0.0.27"
    },
    {
      "type": "Host",
      "value": "10.0.0.28"
    }
  ],
  "name": "network_group_3"
},
{ 
 "literals": [
    {
      "type": "Network",
      "value": "10.10.10.0/24"
    },
    {
      "type": "Network",
      "value": "10.10.20.0/24"
    },
    {
      "type": "Host",
      "value": "10.0.0.6
    }
  ],
  "name": "network_group_4"

2 个答案:

答案 0 :(得分:0)

以下是Python将CSV转换为JSON的一个很好的解释:

http://www.idiotinside.com/2015/09/18/csv-json-pretty-print-python/

答案 1 :(得分:0)

以下是使用jq

的解决方案

如果文件filter.jq包含

[
  split("\n")                                                  # split string into lines
| (.[0]    | split(",")) as $headers                           # split header
| (.[1:][] | split(","))                                       # split data rows
| select(length>0)                                             # get rid of empty lines
]
| [
      group_by(.[2])[]
    | {
         name:     .[0][2],
         literals: map({type:.[0], value:.[1]})
      }
  ]

,您的数据位于名为data然后

的文件中
jq -M -R -s -r -f filter.jq data

将生成

[
  {
    "name": "network_group_3",
    "literals": [
      {
        "type": "Network",
        "value": "10.0.0.0/8"
      },
      {
        "type": "Host",
        "value": "10.0.0.27"
      },
      {
        "type": "Host",
        "value": "10.0.0.28"
      }
    ]
  },
  {
    "name": "network_group_4",
    "literals": [
      {
        "type": "Network",
        "value": "10.10.10.0/24"
      },
      {
        "type": "Network",
        "value": "10.10.20.0/24"
      },
      {
        "type": "Host",
        "value": "10.10.10.6"
      }
    ]
  }
]