python - 嵌套 JSON 元素
问题描述
我编写了一个 Python 程序,在其中通过连接从 SQL 中提取数据,然后将其转换为 JSON。
我的带有 JSON 转换的 SQL 查询是
"SELECT CAST( (SELECT p.[Pname],p.[Pnumber] ,d.[Dname], e.[fname] as 'Employee.fname'
, e.[lname] as 'Employee.lname', w.[hours] as 'Employee.hours'
FROM [dbo].[PROJECT] p
join [dbo].[DEPARTMENT] d on p.[dnum] = d.[dnumber]
join [dbo].[works_on] w on w.[pno] = p.[pnumber]
join [dbo].[employee] e on e.[ssn] = w.[essn]
for json path) AS TEXT)"
样本输出是
[{"Pname":"ProductX","Pnumber":1,"Dname":"Research","Employee":{"fname":"John","lname":"Smith","hours":"32.5"}},
{"Pname":"ProductX","Pnumber":1,"Dname":"Research","Employee":{"fname":"Joyce","lname":"English","hours":"20"}},
{"Pname":"ProductX","Pnumber":1,"Dname":"Research","Employee":{"fname":"Roy","lname":"Lewallen","hours":"2"}},
{"Pname":"ProductX","Pnumber":1,"Dname":"Research","Employee":{"fname":"Jisha","lname":"Carpenter","hours":"25"}},
{"Pname":"ProductY","Pnumber":2,"Dname":"Research","Employee":{"fname":"John","lname":"Smith","hours":"7.5"}},
{"Pname":"ProductY","Pnumber":2,"Dname":"Research","Employee":{"fname":"Joyce","lname":"English","hours":"20"}},
.......
我需要像这样的输出(将属于同一项目的所有雇员分组到一个列表中):
[{"Pname":"ProductX","Pnumber":1,"Dname":"Research","Employee":
[
{"fname":"John","lname":"Smith","hours":"32.5"},
{"fname":"Joyce","lname":"English","hours":"20"},
{"fname":"Roy","lname":"Lewallen","hours":"2"},
{"fname":"Jisha","lname":"Carpenter","hours":"25"}
]
},
{"Pname":"ProductY","Pnumber":2,"Dname":"Research","Employee":
{"fname":"John","lname":"Smith","hours":"7.5"},...............
]
解决方案
input_list = [{"Pname":"ProductX","Pnumber":1,"Dname":"Research","Employee":{"fname":"John","lname":"Smith","hours":"32.5"}},
{"Pname":"ProductX","Pnumber":1,"Dname":"Research","Employee":{"fname":"Joyce","lname":"English","hours":"20"}},
{"Pname":"ProductX","Pnumber":1,"Dname":"Research","Employee":{"fname":"Roy","lname":"Lewallen","hours":"2"}},
{"Pname":"ProductX","Pnumber":1,"Dname":"Research","Employee":{"fname":"Jisha","lname":"Carpenter","hours":"25"}},
{"Pname":"ProductY","Pnumber":2,"Dname":"Research","Employee":{"fname":"John","lname":"Smith","hours":"7.5"}},
{"Pname":"ProductY","Pnumber":2,"Dname":"Research","Employee":{"fname":"Joyce","lname":"English","hours":"20"}}]
output_list = []
pnum_list = []
for item in input_list:
if item['Pnumber'] in pnum_list:
for i in range(len(output_list)):
if output_list[i]["Pnumber"] == item['Pnumber']:
output_list[i]['Employee'].append(item['Employee'])
break
else:
output_list.append({
"Pname":item['Pname'],
"Pnumber":item['Pnumber'],
"Dname":item['Dname'],
"Employee": [item['Employee']]
})
pnum_list.append(item['Pnumber'])
print(output_list)
[
{'Pname': 'ProductX', 'Pnumber': 1, 'Dname': 'Research', 'Employee': [
{'fname': 'John', 'lname': 'Smith', 'hours': '32.5'},
{'fname': 'Joyce', 'lname': 'English', 'hours': '20'},
{'fname': 'Roy', 'lname': 'Lewallen', 'hours': '2'},
{'fname': 'Jisha', 'lname': 'Carpenter', 'hours': '25'}
]},
{'Pname': 'ProductY', 'Pnumber': 2, 'Dname': 'Research', 'Employee': [
{'fname': 'John', 'lname': 'Smith', 'hours': '7.5'},
{'fname': 'Joyce', 'lname': 'English', 'hours': '20'}
]}
]
推荐阅读
- django - 如何使用同一类将一个变量从一个方法传递给另一个方法?
- asp.net-mvc - 在我的模型中,我有一条可以以两种不同方式显示的信息。如果我为这两种方式创建两个字段,我该如何链接这两者?
- xamarin.forms - 如何使用 Windows 更新 Visual Studio 2017 中 Xamarin.Form 项目中的单声道版本?
- jsp - 为什么我不能从资源/静态文件夹中为 Spring Boot 应用程序中的不同页面添加 css 和 js 文件?
- javascript - document.write() 和 .innerHTML 不写入 HTML
- html - 1 个 div,1 个文本输入,并排,将输入拉伸到 100%,两者都没有固定宽度
- asp.net-core - 将 appsettings.{Environment}.json 中的数组附加到 appsettings.json
- amazon-web-services - 如何重命名 AWS IoT 规则?
- python - Python Regex:如何在括号和引号之间提取字符串(如果存在)
- async-await - 是否可以使用在整个应用程序中共享的全局同步上下文?