python - 使用格式化从 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" } ] } ] } ]
解决方案
不确定输出格式应该是什么,但您可以尝试使用此代码示例并将print
call 替换为您的实现。
从集合导入 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" } ] } ] }]
推荐阅读
- javascript - 带有 Javascript 的 ASP.NET Core DateTime Rest API 转换为 UTC 而不是 java
- prometheus - 在 PromQL 中加入两个指标
- python - 如何输出没有空格的句子或短语?
- java - 为什么我的 while 循环只对某些嵌套的“if”语句有效,而对其他语句无效?
- json - 如何将 JSON 字符串转换为 KMM 中的对象
- flutter - 我在控制台中遇到以下错误,我已经尝试修复了几个小时
- visa-api - 令牌验证失败 Visa X-pay(支付账户验证 API)
- javascript - 每当我们单击按钮时如何播放和停止音频
- cypress - 赛普拉斯测试元素是否不可拖动
- javascript - Mac 上 Safari 中的无效 CSS 样式