2

我有一个没有统一结构的嵌套 json 文件,如以下示例:

[{ "name": "Jon", "last": "Jonny"}, 
 {"name": "Jimmy", "last": "johnson", "kids":[{"kidName":"johnson_junior","kidAge": "1"}, {"kidName":"johnson_junior2", "kidAge": "4"}]}]

看到在第二项中,第一项中不存在列表名称“kids”。

当我尝试使用 pandas json_normalize 将 json 展平时,它会抛出错误消息:“KeyError:'kids'”

这是 json_normalize 命令:

flat_json = json_normalize(json_file, record_path= 'kids',  errors='ignore')

似乎 json_normalize 不支持没有统一结构的嵌套 json。

有人遇到过同样的问题吗?你知道如何通过它吗?

4

1 回答 1

3

如果不是很麻烦,我会'kids':[{'kidName':None,'kidAge':None}]在该密钥不存在时添加。

errors='ignore'用于meta(请参阅文档)中列出的键,而您指定的kids记录路径

我不知道您是否在寻求一般性建议,例如“如果记录路径密钥有时不可用会发生什么?”,但如果您提供的数据示例是您当前的问题,这就是我建议的快速解决方案.

像这样的工作:

data = {"name": "Jimmy", "last": "johnson", "kids":[{"kidName":"johnson_junior","kidAge": "1"}, {"kidName":"johnson_junior2", "kidAge": "4"}]}]

# then you inform with empty kids if looping doesn't alter your desired flow that much
[elem.update({'kids':[{'kidName':None,'kidAge':None}]}) for elem in data if 'kids' not in elem.keys()]

# finally you normalize
flat_json = json_normalize(data,'kids', ['name','last'])

输出:

kidAge          kidName   name     last
0   None             None    Jon    Jonny
1      1   johnson_junior  Jimmy  johnson
2      4  johnson_junior2  Jimmy  johnson
于 2018-03-11T11:12:35.423 回答