将JSON解码为Python

时间:2013-11-07 21:05:23

标签: python json

我有以下名为exampleData.json的Python文件:

[
  {
    "startTime" : 1383790636.261329,
    "confidence" : 2,
    "type" : 3,
    "startTime2" : "2013-11-06 21:17:16.261",
    "duration" : 4.287207
  },
  {
    "startTime" : 1383790640.548536,
    "confidence" : 2,
    "type" : 3,
    "startTime2" : "2013-11-06 21:17:20.549",
    "duration" : 3.674701
  },
  {
    "startTime" : 1383790644.223238,
    "confidence" : 2,
    "type" : 3,
    "startTime2" : "2013-11-06 21:17:24.223",
    "duration" : 7.35066
  }
]

(实际文件大约有1000个块,我刚刚粘贴了3个)。我已经使用jsonlint.com验证了整个JSON文件,它是有效的JSON。

我正在尝试运行以下名为jsonGraph.py的程序将代码输入到python中:

import json
import pprint

data = []
with open('D:/Users/Vik/Downloads/exampleData.json') as data_file:
    for line in data_file:
        data.append(json.loads(line))

问题是,当我尝试运行程序时,我收到以下错误:

D:\Users\Name>py D:\Users\Name\Downloads\jsonGraph.py
Traceback (most recent call last):
  File "D:\Users\Name\Downloads\jsonGraph.py", line 7, in <module>
    data.append(json.loads(line))
  File "D:\Python33\lib\json\__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "D:\Python33\lib\json\decoder.py", line 352, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "D:\Python33\lib\json\decoder.py", line 368, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting object: line 1 column 2 (char 1)

有关导致此错误的原因的任何想法?

我已经在Google上搜索了错误消息,此网站上也有类似的帖子,但有类似的错误,但这个问题有两个独特之处:1。这些是由于使用了无效的JSON代码引起的,我的是有效的,2这是一个略有不同的错误信息。我还检查了python文档,但没有找到任何见解。

2 个答案:

答案 0 :(得分:3)

如果文件是您指定的,则不要逐行加载,您必须加载整个文件。

答案 1 :(得分:2)

您有一个大型JSON对象。使用json.load()

将其解析为一个
import json

with open('D:/Users/Vik/Downloads/exampleData.json') as data_file:
    data = json.load(data_file)

您的代码尝试将每一行视为JSON值;因为[(第一行)不是一个完整的JSON值,也不会合并接下来的几行,所以它不会起作用。