Python 使用格式从CSV创建JSON
我希望构建以下结构。我已经编写了解析csv的代码。但现在,我希望格式化csv的结构。我想在每个元素的区域id或主节点内对testInfo和finInfo进行分组 Json示例:Python 使用格式从CSV创建JSON,python,json,Python,Json,我希望构建以下结构。我已经编写了解析csv的代码。但现在,我希望格式化csv的结构。我想在每个元素的区域id或主节点内对testInfo和finInfo进行分组 Json示例: [ { "area_id": "13", "area_name": "Joanne Smith", "test_diff": "27%", "test_id": "1239", "test_pull": "119",
[
{
"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" } ] } ] } ]
不确定输出格式应该是什么,但您可以尝试使用此代码示例并用实现替换
print
调用
从集合导入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" } ] } ] } ]
[
{
“区域ID”:“12”,
“区域名称”:“乔·特纳”,
“testInfo”:[
{
“testid”:“1233”,
“测试名称”:“2020年总决赛”,
“finInfo”:[
{
“finid”:“000”,
“finname”:“2020年财务结果”
}
]
},
{
“testid”:“1234”,
“测试名称”:“2020年总决赛”,
“finInfo”:[
{
“finid”:“001”,
“finname”:“2020年财务结果”
},
{
“finid”:“003”,
“finname”:“2020年财务结果”
}
]
}
]
},
{
“区域ID”:“13”,
“区域名称”:“Joanne Smith”,
“testInfo”:[
{
“testid”:“1239”,
“测试名称”:“2019年决赛”,
“finInfo”:[
{
“finid”:“019”,
“finname”:“2019年财务结果”
}
]
}
]
}
]到此为止,我根据您提交的解决方案,用所需的输出更新了帖子。请让我知道这是否可以实现。所以最后一个问题。看看结果,我想我可能把结果搞混了。finInfo应该是testInfo的子集。这样,如果有多个testid,它们将只显示一个,并且testid下可以有多个finid或信息。让我知道这是否有意义。@kingjtiv您能提供一个所需输出的示例吗?添加到您的解决方案中。同时更新到main。非常感谢。