非常嵌套的JSON与可选字段到pandas数据框架



我有一个JSON具有以下结构。我想将一些数据提取到不同的列表中,以便能够将它们转换为pandas数据框。

{
"ratings": {
"like": {
"average": null,
"counts": {
"1": {
"total": 0,
"users": []
}
}
}
},
"sharefile_vault_url": null,
"last_event_on": "2021-02-03 00:00:01",
],
"fields": [
{
"type": "text",
"field_id": 130987800,
"label": "Name and Surname",
"values": [
{
"value": "John Smith"
}
],
{
"type": "category",
"field_id": 139057651,
"label": "Gender",
"values": [
{
"value": {
"status": "active",
"text": "Male",
"id": 1,
"color": "DCEBD8"
}
}
],
{
"type": "category",
"field_id": 151333010,
"label": "Field of Studies",
"values": [
{
"value": {
"status": "active",
"text": "Languages",
"id": 3,
"color": "DCEBD8"
}
}
],
}
}

例如,创建一个列表

names = []

where if "label"在"字段"中。列表为"姓名"one_answers"姓氏";我添加了["values"][0]["value"],所以names现在包含了John smith。我对"性别"也是这么做的。genders.

上面的字典包含在一个字典列表中,所以我只需要遍历列表并提取相关字段,如下所示:

names = []
genders = []
for r in range(len(users)):
for i in range(len(users[r].json()["items"])):
for field in users[r].json()["items"][i]["fields"]:
if field["label"] == "Name and Surname":
names.append(field["values"][0]["value"])
elif field["label"] == "Gender":
genders.append(field["values"][0]["value"]["text"])
else:
# Something else

其中users是来自API的响应列表,其中每个JSON具有items是字典列表,我可以找到field键,其值为不同字段的字典列表(如名称和姓氏和性别)。

问题是那本带有"研究领域"标签的字典是可选的,并不总是出现在字段列表中。

我如何检查它的存在,如果是,将其值附加到列表中,否则None?

对我来说,您拥有的数据似乎不是有效的JSON。然而,如果我是你,我会尝试使用pandas.json_normalize。根据文档,如果遇到一个没有标签的对象,该函数将放置None

最新更新