【问题标题】:Python only deserialize top layer json dataPython 只反序列化顶层 json 数据
【发布时间】:2019-01-13 03:37:18
【问题描述】:

我有大量的大型 json 文件要处理。 不幸的是,并非所有的 json 数据都结构良好。

简而言之,数据的形状像

[ { A1:va1, B:[ {B1:vb1, ...}, {B2...}, {...} ] }, { A2 ....}, {....} ]

A 对象数组,其中包含一个非对多 B 对象的内部数组。

不幸的是,给定的 B 对象在随机的情况下会出现结构违规。

我想要做的是遍历 A 级别,但强制 B 对象被视为单独的字符串,而不是由 json.loads() 解析 - 或 - 导致 json.loads() 处理每个B 的实例作为字符串,因此我可以记录 B 字符串以进行第一手检查。

正如我所说,上面的数据形状只是简而言之。在真实数据中,在A 级别的顶部还有很多模棱两可的事情发生〜因为我认为我不能成功地定义并将模式有效地应用于这些数据。至少在顶部A 级别没有任何结构违规。

【问题讨论】:

  • 你能举一个你所说的这些“结构性违规”的实际例子吗?您肯定不可能让json.load() 忽略较低级别的结构,因为如果不解析较低级别的对象,它绝对无法知道顶级对象的结束位置和下一个对象的开始位置。
  • @jasonharper 感谢您的回复。我认为存在多个数据质量问题;对象之间、k、v 对之间、同一范围内的重复键名之间缺少逗号,......但我无法通过协议呈现实际数据。我希望除了事实上的标准json 之外可能还有另一个库来提供帮助?!?我真的不想将其解析为较低级别的文本文件。

标签: python arrays json


【解决方案1】:

问题是我可以确定地检查数据。 在 15 分钟内,我使用这种方法得到了答案;不是我想要的答案,但至少我现在知道我必须处理什么。

我使用 JSON Formatter 插件将一个文件加载到 Notepad++ 中。 对其进行格式化并将其放入 Excel 工作表中。添加了几列方程来指出感兴趣的行、几个 Ctrl-F 查找全部和排序。

现在最坏的情况就在我面前。但至少我现在知道了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多