使用不同的键规范化嵌套的 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 文件?