首页 > 解决方案 > 使用格式化从 CSV 创建 JSON

问题描述

我正在寻找构建以下结构。我已经编写了解析我的 csv 的代码。但现在我正在寻找格式化 csv 的结构。我想在 area_id 或每个元素的主节点中对 testInfo 和 finInfo 进行分组。

示例 Json:

    [
    {
        "area_id": "13", 
        "area_name": "Joanne Smith", 
        "test_diff": "27%", 
        "test_id": "1239", 
        "test_pull": "119", 
        "test_name": "Finals 2019",
        "fin_id" : "019",
        "fin_name" : "Results Fin 2019"
    }, 
    {
        "area_id": "12", 
        "area_name": "Joe Turner", 
        "test_diff": "7%", 
        "test_id": "1233", 
        "test_pull": "149", 
        "test_name": "Finals 2020",
        "fin_id" : "000",
        "fin_name" : "Results Fin 2020"
    }, 
    {
        "area_id": "12", 
        "area_name": "Joe Turner", 
        "test_diff": "7%", 
        "test_id": "1234", 
        "test_pull": "150", 
        "test_name": "Finals 2020",
        "fin_id" : "001",
        "fin_name" : "Results Fin 2020"
    }, 
    {
        "area_id": "12", 
        "area_name": "Joe Turner", 
        "test_diff": "7%", 
        "test_id": "1234", 
        "test_pull": "150", 
        "test_name": "Finals 2020",
        "fin_id" : "003",
        "fin_name" : "Results Fin 2020"
    }
]

我正在寻找的最终结果是

[{"areaid":"12","areaname":"Joe Turner","testInfo":[{"testid":"1233","testname":"Finals 2020"},{"testid":"1234","testname":"Finals 2020"},{"testid":"1234","testname":"Finals 2020"}],"finInfo":[{"finid":"000","finname":"Results Fin 2020"},{"finid":"001","finname":"Results Fin 2020"},{"finid":"003","finname":"Results Fin 2020"}]},{"areaid":"13","areaname":"Joanne Smith","testInfo":[{"testid":"1239","testname":"Finals 2019"}],"finInfo":[{"finid":"019","finname":"Results Fin 2019"}]}]

期望的输出

[ { "areaid":"12", "areaname":"Joe Turner", "testInfo":[ { "testid":"1233", "testname":"Finals 2020", "finInfo":[ { "finid":"000", "finname":"Results Fin 2020" } ] }, { "testid":"1234", "testname":"Finals 2020", "finInfo":[ { "finid":"001", "finname":"Results Fin 2020" }, { "finid":"003", "finname":"Results Fin 2020" } ] } ] }, { "areaid":"13", "areaname":"Joanne Smith", "testInfo":[ { "testid":"1239", "testname":"Finals 2019", "finInfo":[ { "finid":"019", "finname":"Results Fin 2019" } ] } ] } ]

标签: pythonjson

解决方案


不确定输出格式应该是什么,但您可以尝试使用此代码示例并将printcall 替换为您的实现。

从集合导入 defaultdict

arr = [
    {
        "area_id": "13",
        "area_name": "Joanne Smith",
        "test_diff": "27%",
        "test_id": "1239",
        "test_pull": "119",
        "test_name": "Finals 2019",
        "fin_id" : "019",
        "fin_name" : "Results Fin 2019"
    },
    {
        "area_id": "12",
        "area_name": "Joe Turner",
        "test_diff": "7%",
        "test_id": "1233",
        "test_pull": "149",
        "test_name": "Finals 2020",
        "fin_id" : "000",
        "fin_name" : "Results Fin 2020"
    },
    {
        "area_id": "12",
        "area_name": "Joe Turner",
        "test_diff": "7%",
        "test_id": "1234",
        "test_pull": "150",
        "test_name": "Finals 2020",
        "fin_id" : "001",
        "fin_name" : "Results Fin 2020"
    },
    {
        "area_id": "12",
        "area_name": "Joe Turner",
        "test_diff": "7%",
        "test_id": "1234",
        "test_pull": "150",
        "test_name": "Finals 2020",
        "fin_id" : "003",
        "fin_name" : "Results Fin 2020"
    }
]

formatted_data = defaultdict(lambda: {
    'testinfo': [],
    'fininfo': []
})

for item in arr:
    area_id = item['area_id']
    area_name = item['area_name']
    area_data = formatted_data[(area_id, area_name)]
    area_data['testinfo'].append({
        'testid': item['test_id'],
        'testname': item['test_name']
    })
    area_data['fininfo'].append({
        'finid': item['fin_id'],
        'finname': item['fin_name']
    })

result = []
for (area_id, area_name), item_data in formatted_data.items():
    result_item = {}
    result_item['areaid'] = area_id
    result_item['areaname'] = area_name
    result_item['testInfo'] = []
    for testinfo in item_data['testinfo']:
        result_item['testInfo'].append(testinfo)
    result_item['finInfo'] = []
    for fininfo in item_data['fininfo']:
        result_item['finInfo'].append(fininfo)

    result.append(result_item)

print(result)

期望的输出

[ { "areaid":"12", "areaname":"Joe Turner", "testInfo":[ { "testid":"1233", "testname":"Finals 2020", "finInfo":[ { "finid ":"000", "finname":"Results Fin 2020" } ] }, { "testid":"1234", "testname":"Finals 2020", "finInfo":[ { "finid":"001" , "finname":"Results Fin 2020" }, { "finid":"003","finname":"Results Fin 2020" } ] } ] }, { "areaid":"13", "areaname":"Joanne Smith", "testInfo":[ { "testid":"1239", "testname" :"Finals 2019", "finInfo":[ { "finid":"019", "finname":"Results Fin 2019" } ] } ] } ]"testInfo":[ { "testid":"1239", "testname":"Finals 2019", "finInfo":[ { "finid":"019", "finname":"Results Fin 2019" } ] } ] }]"testInfo":[ { "testid":"1239", "testname":"Finals 2019", "finInfo":[ { "finid":"019", "finname":"Results Fin 2019" } ] } ] }]


推荐阅读