在python中导入多行JSON文件

时间:2018-11-25 06:29:23

标签: python json import

我正在尝试在python中导入一个JSON文件,其中包含许多对象,如下所示:

{"ID": 1989,  "Attrib1": "74574d4c6",    "Attrib2": null,    "Attrib3": "41324" }
{"ID": 1990,  "Attrib1": "1652857c6",    "Attrib2": asd123,    "Attrib3": "424" }

该文件的每个对象都有换行符,因此json.load(file)在第一个换行符处失败。

我尝试使用以下方法遍历它们:

with open(myFileLocation,'r') as myfile:
    for line in myfile:
        Data = json.loads(row)
return Data

但是我无法将每行添加到字典对象中,因为它没有添加(或其他任何知道的方法)。

如何将JSON文件中的所有对象作为字典返回?

1 个答案:

答案 0 :(得分:0)

json.loads(和json.load)不会解码多个json对象。

>>>json.loads('{}')
{}
>>>json.loads('{}{}')
JSONDecodeError                           Traceback (most 
recent call last)
<ipython-input-7-0285b42a3a05> in <module>()
    ----> 1 json.loads('{}{}')

~\AppData\Local\Continuum\anaconda3\lib\json\__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
    352             parse_int is None and parse_float is None and
    353             parse_constant is None and object_pairs_hook 
is None and not kw):
    --> 354         return _default_decoder.decode(s)
    355     if cls is None:
    356         cls = JSONDecoder

~\AppData\Local\Continuum\anaconda3\lib\json\decoder.py in decode(self, s, _w)
    340         end = _w(s, end).end()
    341         if end != len(s):
    --> 342             raise JSONDecodeError("Extra data", s, end)
    343         return obj
    344 

JSONDecodeError: Extra data: line 1 column 3 (char 2)

要转储多个词典,可以通过转储列表将它们包装在列表中。

>>> dict1 = {}
>>> dict2 = {}
>>> json.dumps([dict1, dict2])
'[{}, {}]'
>>> json.loads(json.dumps([dict1, dict2]))
[{}, {}]

还可以按如下所示使用附加

list = []
    for line in open('data.json'), 'r'):
    list.append(json.loads(line)