通过格式不正确的JSON文件python进行解析

时间:2018-10-24 02:45:58

标签: python json parsing

为我提供了一个数据集,我需要对其进行一些数据分析。给我的每个数据集都在一个json文件中。我遇到的问题是,我注意到每个json对象都没有用'分隔,所以我不能只是将简单的json转储到变量中。而且我不能仅在每个对象之间添加',',因为每个文件有100多个json对象,并且大约有100个文件,因此这样做会花费很长时间。因此,我想知道如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

由于您没有提供数据示例,因此可以扩展JSONDecoder,添加类似以下的类:

import json

class ComplexEncoder(json.JSONDecoder):
    def decode(self, obj):
        obj = obj.replace(" ", ", ")
        print(obj)
        return json.JSONDecoder.decode(self, obj)

a = json.loads('{"a":1 "b":2}', cls=ComplexEncoder)
print(a)
# {'a': 1, 'b': 2}

基本上,只需用逗号替换该空格,如果:和该值之间有空格,请创建一个不替换该正则表达式的表达式。

我认为您指的是json.loads()而不是json.dumps

答案 1 :(得分:0)

You could try using littletable, which will import files containing consecutive, undelimited (even multiline) JSON objects.

import littletable as lt

data = """
{"a": 100, "b": 200, "c": 300}
{"a": 101, "b": 201, "c": 301}
{
    "a": 102, 
    "b": 202, 
    "c": 302

}
"""

json_table = lt.Table()
# for this post we import from the data using a Python string;
# in your program, just do json_table.json_import('data_file.json')
json_table.json_import(data)
for row in json_table:
    print(row.a, row.b, row.c)

Prints:

100 200 300
101 201 301
102 202 302

Once it is imported, you could re-export it as a CSV, or just use the table like a normal Python list and serialize it any way you like.

Disclosure: I am the author of littletable