2017-07-31 147 views
0

我想将下面的CSV转换为JSON。任何帮助将不胜感激。 CSV文件的将CSV转换为嵌套JSON

样品(文件将包含大量的网络组,网络,主机属性)

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" 
+0

请告诉我们您的努力,以便更好地帮助你。 – TomServo

+0

你已经尝试做什么?用你想要完成的语言是什么? – Maramal

+0

我正在尝试在Python中做很新的事情。我到目前为止已将CSV转换为包含像下面这样的键/值对的字典列表,并做了jason.dumps。但无法弄清楚嵌套字典def csv_dict_list(variables_file): #打开基于变量的csv,遍历行并将值映射到包含键/值对的字典列表 reader = csv.DictReader(open( ) dict_list = [] 对于阅读器中的行: dict_list.append(line) return dict_list – Sagar

回答

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" 
     } 
    ] 
    } 
]