user2826735
user2826735

Reputation: 305

decoding JSON into Python

I have the following Python file named exampleData.json:

[
  {
    "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
  }
]

(The actual file has about 1000 blocks, I've just pasted 3 here). I have validated the entire JSON file using jsonlint.com, and it is valid JSON.

I am trying to run the following program named jsonGraph.py to input the code into 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))

The problem is, when I try to run the program I get the following error:

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)

Any ideas as to what is causing this error?

I have googled the error message, and there are similar posts on this website, with similar errors, but this question is unique for two reasons: 1. those were caused by using invalid JSON code, and mine is valid, and 2. It is a slightly different error message. I have also checked the python documentation and found no insights.

Upvotes: 1

Views: 256

Answers (2)

Martijn Pieters
Martijn Pieters

Reputation: 1125058

You have one large JSON object. Parse it in one with json.load():

import json

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

Your code tries to treat each line as a JSON value; that won't work because [ (the first line) is not a complete JSON value, nor would combining the next few lines be.

Upvotes: 2

Yike Lu
Yike Lu

Reputation: 1035

If the file is as you specified, you don't load it line by line, you have to load the entire file.

Upvotes: 3

Related Questions