如何标准化具有很多不同集合的深度嵌套的 JSON 结果?
Posted
技术标签:
【中文标题】如何标准化具有很多不同集合的深度嵌套的 JSON 结果?【英文标题】:How do I normalize deeply nested JSON results that has a lot of different collections? 【发布时间】:2021-12-11 07:33:51 【问题描述】:我所拥有的是 monday.com 通过 graphql 查询获得的结果。返回的数据包含许多不同的集合,例如字典列表的字典......例如。
"data":
"boards": [
"name": "board name",
"groups": [
"title": "group title 1",
"title": "group title 2",
"title": "group title 3",
"title": "group title 4"
]
]
,
"account_id": "0000000"
我想做一个熊猫 dataframe
喜欢
group.board group.title
0 'board_name' 'group title 1'
1 'board_name' 'group title 2'
2 'board_name' 'group title 3'
3 'board_name' 'group title 4'
我试过了
pd.json_normalize(json_data, 'boards')
但我不断收到 KeyError: 'boards'
【问题讨论】:
因为json_data
没有密钥boards
,所以您会收到密钥错误。
【参考方案1】:
您的 json 字典无效(缺少右括号,所以我修复了它)。我会这样做。在这里,我们将进入json_data["data"]["boards"]
的字典,因为这是数据所在的位置,使用"groups"
作为records
键,并使用字段"name"
作为元数据字段之一。
import pandas as pd
json_data =
"data":
"boards": [
"name": "board name",
"groups": [
"title": "group title 1" ,
"title": "group title 2" ,
"title": "group title 3" ,
"title": "group title 4"
]
,
]
,
"account_id": "0000000"
pd.json_normalize(json_data["data"]["boards"], "groups", ["name"])
输出:
title name
0 group title 1 board name
1 group title 2 board name
2 group title 3 board name
3 group title 4 board name
【讨论】:
谢谢!我想我在尝试简化此处问题的数据时忘记了它。不过谢谢!【参考方案2】:您收到一个密钥错误,因为 json_data
没有密钥 boards
。 json_data["data"]
可以,但您仍然无法获得预期的结果。
您需要将json_data["data"]["boards"]
作为字典列表传递,将“组”作为record_path
,并将["name"]
作为meta
路径:
>>> df = pd.json_normalize(json_data["data"]["boards"], "groups", ["name"])
title name
0 group title 1 board name
1 group title 2 board name
2 group title 3 board name
3 group title 4 board name
然后,您可以重命名列:
>>> df.columns = ["group.title", "group.board"]
group.title group.board
0 group title 1 board name
1 group title 2 board name
2 group title 3 board name
3 group title 4 board name
【讨论】:
谢谢!之后没有考虑改名。以上是关于如何标准化具有很多不同集合的深度嵌套的 JSON 结果?的主要内容,如果未能解决你的问题,请参考以下文章
具有深度嵌套层次结构的不可变 NSDictionary:更改键的值?