【问题标题】:How to read JSON file with multiple JSON objects in Python?如何在 Python 中读取具有多个 JSON 对象的 JSON 文件?
【发布时间】:2016-04-08 06:04:32
【问题描述】:

所以这是在 python 中读取 JSON 文件的标准方法

import json
from pprint import pprint

with open('ig001.json') as data_file:    
    data = json.load(data_file)

pprint(data)

但是,我要读取的 JSON 文件中包含多个 JSON 对象。所以它看起来像:

[{},{}.... ]

[{},{}.... ]

这表示 2 个 JSON 对象,在每个 {} 内的每个对象内部,都有一堆键:值对。

因此,当我尝试使用上面的标准读取代码读取此内容时,我收到错误:

Traceback(最近一次调用最后一次): 文件“jsonformatter.py”,第 5 行,在 数据 = json.load(data_file) 加载中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py”,第 290 行 **千瓦) 加载中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py”,第 338 行 返回 _default_decoder.decode(s) 解码中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py”,第 369 行 raise ValueError(errmsg("额外数据", s, end, len(s))) ValueError:额外数据:第 3889 行第 2 列 - 第 719307 行第 2 列(字符 164691 - 30776399)

第 3889 行是第一个 JSON 对象的结束位置和下一个对象的开始位置,该行本身看起来像“][”。

任何关于如何解决此问题的想法将不胜感激,谢谢!

【问题讨论】:

  • 你能发布你的json文件吗?
  • 你的意思是多个 JSON 数组,对吧?
  • 请提供有关您拥有的 JSON 文件的更多数据。

标签: python json


【解决方案1】:

如果没有你的 JSON 文件的链接,我将不得不做出一些假设:

  1. 顶级的json数组并不是各占一行(因为第一个解析错误是在3889行),所以我们不能随便
  2. 这是文件中唯一存在的无效 JSON 类型。

解决这个问题:

# 1. replace instances of `][` with `]<SPLIT>[`
# (`<SPLIT>` needs to be something that is not present anywhere in the file to begin with)

raw_data = data_file.read()  # we're going to need the entire file in memory
tweaked_data = raw_data.replace('][', ']<SPLIT>[')

# 2. split the string into an array of strings, using the chosen split indicator

split_data = tweaked_data.split('<SPLIT>')

# 3. load each string individually

parsed_data = [json.loads(bit_of_data) for bit_of_data in split_data]

(请原谅可怕的变量名)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-14
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    相关资源
    最近更新 更多