python - 打印父数据以及嵌套 JSON 的子数据
问题描述
我有以下类型的 JSON。在另一个表中,我有 JSONPaths,它告诉我获取某些值。如果要获取子元素的值,则需要获取所有相应的父属性值并将所有这些值作为单行存储在数据框中。
{
"Parent": {
"Name": "Bob",
"Age": "80",
"Children": [
{
"Name": "Michael",
"Gender":"M",
"Children": [
{
"Name": "Ezee",
"Gender": "M",
"Age": 20
},
{
"Name": "Ezee",
"Gender": "M",
"Age": 28,
"Children": [
{
"Name": "Dre",
"Age": 1
},
{
"Name": "George",
"Age": 2
}
]
}
],
"Age": 50,
"MiddleName": "Jay"
},
{
"Name": "Justin",
"Gender": "M",
"Children": [
{
"Name": "Emily",
"Age": 18,
"Gender": "F"
}
],
"Age": 45
}
]
}
}
假设我需要获取 JSON 路径的值:Parent/Children/0/Children/0/Name
,我需要获取相应父级(Parent/Children/0/[Name or Age or etc.])的名称、年龄等属性值并存储所有上述值作为单行。
目前,我可以通过传递相关路径分别获取父值,并通过传递该路径分别获取子值。
def findValue(path, json_data):
paths = path.split("/")
data = json_data
for i in range(0,len(paths)):
if isinstance(data, list):
paths[i]=int(paths[i])
data = data[paths[i]]
else:
data = data.get(paths[i])
return data
我怎么能做到这一点?
解决方案
如果我理解得很好,你想要的只是一条路径,比如Parent/Children/0/Children/0/Name
获取其父级相同属性的路径。在这种情况下,它将是Parent/Children/0/Name
这是我对python解释器的尝试,希望对您有所帮助:
>>> path = "Parent/Children/0/Children/0/Name"
>>> path_l = path.split('/')
>>> rev = path_l[::-1]
>>> rev
['Name', '0', 'Children', '0', 'Children', 'Parent']
>>> rev.index('Children')
2
>>> rev = rev[rev.index('Children')+1:]
>>> rev
['0', 'Children', 'Parent']
>>> final = rev[::-1] + [path_l[-1]]
>>> final
['Parent', 'Children', '0', 'Name']
>>> parent_path = '/'.join(final)
>>> parent_path
'Parent/Children/0/Name'
然后使用您的函数,您可以将两个值添加到数据框
>>> df = pandas.DataFrame({'Parent': [], 'Children':[]})
>>> df.append([parent], [children])
推荐阅读
- python - 使用 Conda 安装 Acellera 的 HTMD
- javascript - 关于在启动javascript之前定义属性的问题
- python - python中嵌套类的继承
- c# - 如何在 dotnet 中修复 MassTransit.AmazonSqsTransport.Exceptions.AmazonSqsConnectionException
- css - ngfor 循环中的按钮禁用/启用
- mirth - 是什么导致 Mirth 向出站 IP 和端口发送“RST”重置命令?
- git - Visual Studio Enterprise Git 合并完成但有冲突
- node.js - 繁琐的请求只能在 LoggedIn 状态下进行
- unreal-engine4 - 如何将 UE4 项目附加到 CV?
- node.js - 我在 Node + expressjs 应用程序中集成了 tinymce