【问题标题】:Python to parse file with two lists of json objects using json loadPython使用json加载解析带有两个json对象列表的文件
【发布时间】:2019-02-27 22:20:24
【问题描述】:

我有一个包含两个 json 对象列表的大型 json 文件。

示例数据:

data.json

[{"a":1}][{"b":2}]

parser.py

import json

message = json.load(open("data.json"))

for m in message:
    print m

正如预期的那样,我得到了 ValueError。

File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 290, in load
    **kw)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 369, in decode
    raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 1 column 10 - line 1 column 19 (char 9 - 18)

我想通过跟踪字符数来拆分文件。 处理这个问题的pythonic方法是什么?

【问题讨论】:

    标签: python json jsondecoder


    【解决方案1】:

    您可以使用json.JSONDecoder.raw_decode(),它将解析一个完整的对象并将其返回其结束的字符位置,从而允许您遍历每个对象:

    from json import JSONDecoder, JSONDecodeError
    
    decoder = JSONDecoder()
    data = '[{"a":1}][{"b":2}]'
    
    pos = 0
    while True:
        try:
            o, pos = decoder.raw_decode(data, pos)
            print(o)
        except JSONDecodeError:
            break
    

    结果:

    [{'a': 1}]
    [{'b': 2}]
    

    【讨论】:

      猜你喜欢
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 2011-05-01
      • 2020-01-23
      相关资源
      最近更新 更多