Python使用json加载解析带有两个json对象列表的文件

Posted

技术标签:

【中文标题】Python使用json加载解析带有两个json对象列表的文件【英文标题】:Python to parse file with two lists of json objects using json load 【发布时间】: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方法是什么?

【问题讨论】:

【参考方案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]

【讨论】:

以上是关于Python使用json加载解析带有两个json对象列表的文件的主要内容,如果未能解决你的问题,请参考以下文章

将带有对象数组的 json 文件从文件加载到 SQL 中

JSON数据解析(python3.4)

Python3 JSON 数据解析

转 Python3 JSON 数据解析

json.load 加载带有拉丁字符的文件时出错

Ajax 将带有两个数组的 JSON 对象发送到一个 servlet 并在没有 jQuery 的情况下在 java servlet 中解析