使用不同的键规范化嵌套的 json

Posted

技术标签:

【中文标题】使用不同的键规范化嵌套的 json【英文标题】:Normalize nested json with varying keys 【发布时间】:2021-08-02 02:04:55 【问题描述】:

我通过 API 为不同的项目获取了非常嵌套的 json,然后我尝试将一些接收到的信息转换为数据帧。

到目前为止,我已经使用这条线来获得我想要的数据框:

df = pd.json_normalize(result, meta=['properties'], record_path=['view', 'item', 'fields', 'field'])

这有时有效,但有时我会得到元键或记录路径本身的 KeyError (KeyError: 'view')。我认为这是因为我收到的 json 并不总是完全相同,但会根据所请求信息的项目类型而有所不同。

我现在的问题是,是否有办法跳过没有这些键的数据?或者如果有其他选项可以忽略其中没有这些键的数据?

或者,有没有办法找出哪些项目的键不同并区别对待?由于我们谈论的是带有部分 800-1000 项的转储,其中包含长 json,我认为我实际上无法手动通过它们来找到不适合的转储...

非常感谢任何帮助!

【问题讨论】:

请花点时间阅读"How to create a Minimal, Complete, and Verifiable example" 和"How do I ask a good question?"。按照这些文章中的提示,您将获得更好的结果。 尝试缩短它,希望这会有所帮助。 查看 flatten_json 模块。比 json_normalize 宽容一点 【参考方案1】:

快速而肮脏的解决方案是使用errors='ignore' 选项:

df = pd.json_normalize(result, meta=['properties'], record_path=['view', 'item', 'fields', 'field'], errors='ignore')

如果您还想提取具有不同结构的条目(导致错误的条目),那么最好的办法是从 result 对象中过滤掉它们,然后再次运行 pd.json_normalize 指定合适的record_path

【讨论】:

以上是关于使用不同的键规范化嵌套的 json的主要内容,如果未能解决你的问题,请参考以下文章

规范化/展平非常深的嵌套 JSON(其中名称和属性在各个级别中相同)

Pandas:如何规范化具有多个 JSON 嵌套列表的 JSON 文件?

规范化复杂的嵌套 JSON 文件

MySQL数据类型 - JSON数据类型

Symfony 2 使用自定义非规范化器对嵌套对象进行非规范化

使用唯一键展平/规范化深度嵌套的对象