【发布时间】: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之外可能还有另一个库来提供帮助?!?我真的不想将其解析为较低级别的文本文件。