使用3个变量从CSV创建嵌套的JSON

2024-09-30 22:13:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,我需要从CSV生成一个JSON,这样我就可以运行我的可视化。我想把下面的CSV转换成一个嵌套的JSON

Dep,Color,Org,Color,Name,Color,Size
AAA,green,Umwelt,green,Allgemeine Lage,green,1
AAA,green,Umwelt,red,Grundwasserstände,red,1
AAA,green,Umwelt,green,Kernzonen,green,1
AAA,green,Umwelt,green,Bedeutung,green,1
AAA,green,Umwelt,red,Larven,red,1
AAA,green,Umwelt,red,Verbreitung,red,1
AAA,green,Raumentwicklung,green,Alpenkonvention,green,1
AAA,green,Energie,green,Analyse,green,1
BBB,red,Landwirtschaft,red,Alpprodukte,red,1
BBB,red,Landwirtschaft,red,Beiträge,red,1

我想在下面的嵌套Json中转换CSV。语法必须如下所示。。。否则我的可视化将无法正常运行

{
 "name": "Dep","color":"blue",
 "children": [
  {
   "name": "AAA","color":"blue",
   "children": [
    {
     "name": "Umwelt","color":"blue",
     "children": [
      {"name": "AgglomerativeCluster","color":"blue", "size": 3938},
      {"name": "CommunityStructure","color":"blue", "size": 3812},
      {"name": "HierarchicalCluster","color":"blue", "size": 6714},
      {"name": "MergeEdge","color":"blue", "size": 743}
     ]
    },
    {
     "name": "Landwirtschaft","color":"green",
     "children": [
      {"name": "BetweennessCentrality","color":"blue", "size": 1},
      {"name": "LinkDistance", "color":"blue","size": 1},
      {"name": "MaxFlowMinCut", "color":"blue","size": 1},
      {"name": "ShortestPaths", "color":"blue","size": 1},
      {"name": "SpanningTree", "color":"blue","size": 1}
     ]
    },
    {
     "name": "Energie","color":"blue",
     "children": [
      {"name": "AspectRatioBanker","color":"blue", "size": 7074}
     ]
    }
   ]
  },
     {
   "name": "BBB","color":"blue",
   "children": [
    {
     "name": "cluster","color":"blue",
     "children": [
      {"name": "AgglomerativeCluster","color":"blue", "size": 3938},
      {"name": "CommunityStructure","color":"blue", "size": 3812},
      {"name": "HierarchicalCluster","color":"blue", "size": 6714},
      {"name": "MergeEdge","color":"blue", "size": 743}
     ]
    },
    {
     "name": "graph","color":"green",
     "children": [
      {"name": "BetweennessCentrality","color":"blue", "size": 3534},
      {"name": "LinkDistance", "color":"blue","size": 5731},
      {"name": "MaxFlowMinCut", "color":"blue","size": 7840},
      {"name": "ShortestPaths", "color":"blue","size": 5914},
      {"name": "SpanningTree", "color":"blue","size": 3416}
     ]
    },
    {
     "name": "optimization","color":"blue",
     "children": [
      {"name": "AspectRatioBanker","color":"blue", "size": 7074}
     ]
    }
   ]
  }
 ]
}

Tags: csvnamejsonsize可视化greenbluered
1条回答
网友
1楼 · 发布于 2024-09-30 22:13:37

我假设您的示例输出来自与您显示的不同的输入。试试这个:

inputFileName = "sample.csv"
outputFileName = "output.json"
output = "{\n\t[\n"

with open(inputFileName, "rb") as csv:
  header = csv.readline()
  keys = header.rstrip().split(",")
  nextRow = csv.readline()
  while(nextRow):
    rowData = nextRow.rstrip().split(",")
    ## This next line uses list comprehension, unicode conversion, and collection enumeration inline. This is where all the heavy lifting is.
    row = ['"' + keys[i] + '":' + (data if unicode(data, "utf-8").isnumeric() else '"' + data + '"') for i, data in enumerate(rowData)]
    output += "\t\t{" + ", ".join(row)
    output += "}\n"
    nextRow = csv.readline()
  output += "\t]\n}"

with open(outputFileName, "wb") as json:
  json.write(output)

这会变成

Dep,Color,Org,Color,Name,Color,Size AAA,green,Umwelt,green,Allgemeine Lage,green,1 AAA,green,Umwelt,red,Grundwasserstände,red,1 AAA,green,Umwelt,green,Kernzonen,green,1 AAA,green,Umwelt,green,Bedeutung,green,1 AAA,green,Umwelt,red,Larven,red,1 AAA,green,Umwelt,red,Verbreitung,red,1 AAA,green,Raumentwicklung,green,Alpenkonvention,green,1 AAA,green,Energie,green,Analyse,green,1 BBB,red,Landwirtschaft,red,Alpprodukte,red,1 BBB,red,Landwirtschaft,red,Beiträge,red,1

进入

{
    [
        {"Dep":"AAA", "Color":"green", "Org":"Umwelt", "Color":"green", "Name":"Allgemeine Lage", "Color":"green", "Size":1}
        {"Dep":"AAA", "Color":"green", "Org":"Umwelt", "Color":"red", "Name":"Grundwasserstände", "Color":"red", "Size":1}
        {"Dep":"AAA", "Color":"green", "Org":"Umwelt", "Color":"green", "Name":"Kernzonen", "Color":"green", "Size":1}
        {"Dep":"AAA", "Color":"green", "Org":"Umwelt", "Color":"green", "Name":"Bedeutung", "Color":"green", "Size":1}
        {"Dep":"AAA", "Color":"green", "Org":"Umwelt", "Color":"red", "Name":"Larven", "Color":"red", "Size":1}
        {"Dep":"AAA", "Color":"green", "Org":"Umwelt", "Color":"red", "Name":"Verbreitung", "Color":"red", "Size":1}
        {"Dep":"AAA", "Color":"green", "Org":"Raumentwicklung", "Color":"green", "Name":"Alpenkonvention", "Color":"green", "Size":1}
        {"Dep":"AAA", "Color":"green", "Org":"Energie", "Color":"green", "Name":"Analyse", "Color":"green", "Size":1}
        {"Dep":"BBB", "Color":"red", "Org":"Landwirtschaft", "Color":"red", "Name":"Alpprodukte", "Color":"red", "Size":1}
        {"Dep":"BBB", "Color":"red", "Org":"Landwirtschaft", "Color":"red", "Name":"Beiträge", "Color":"red", "Size":1}
    ]
}

相关问题 更多 >