如何找到并正确关闭未正确关闭的json

时间:2018-12-23 21:44:55

标签: python json python-3.x

我有一个看起来像这样的json文件

   [
    {
      "ID" : 230110850,
      "geometry" : {
        "type" : "Point",
        "s1" : [ 22.226, 60.4 ]
      },
      "properties" : {
        "timestamp" : 54,
      }
    {
      "ID" : 265527480,
      "type" : "Feature",
      "geometry" : {
        "type" : "Point",
         "s1" : [ 22.2, 60.432 ]
      },
      "properties" : {
        "timestamp" : 54,
      }
]

我喜欢大约一百万行,但是json的某些元素未正确关闭。

我想做的是找到'}',如果我找到然后转到下一行,如果是nextline == '{',,那么我想用'}, {'替换该行。

这是我的代码,但无法正常工作。

lst = []

with open('a.txt', 'r') as f1: # a.txt contains those files
    for line in f1:
        if '}' is line:
            line = next(f1)
            if '{' is line:
                lst.append(line.replace('{', '}, {'))

        else:
            lst.append(line)

这给我下一行循环带来的错误。

StopIteration

加上此代码将非常缓慢,因为它必须检查每一行。

有没有更好的解决方案(也许使用正则表达式多行)。任何建议,建议都很好。

1 个答案:

答案 0 :(得分:2)

希望这会有所帮助,但您的里程可能会有所不同。 Explanation link
我试图保持某些格式完整无缺,以期希望可以更轻松地发现潜在问题,我怀疑可能有些问题。一般的想法是我一次性读取文件,并尝试在两行中匹配'} {'并相应地进行更改。

import re

with open('a.txt', 'r') as f1:
    content = f1.read()

result = re.sub(r'}\n(\s*){', r'}\n\1},\n\1{', content)