14

I have a file data.txt which contains a list of json objects like below:

[{"id":"1111","color":["blue"],"length":"120"},{"id":"1112","color":["red"],"length":"130"},{"id":"1112","color":["yellow"],"length":"136"}]

I tried to read it using python json.loads:

data = json.loads("data.txt")

but then I got the following errors. Did I miss anything here? Thanks a lot!

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.pyc in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
    336             parse_int is None and parse_float is None and
    337             parse_constant is None and object_pairs_hook is None and not kw):
--> 338         return _default_decoder.decode(s)
    339     if cls is None:
    340         cls = JSONDecoder

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.pyc in decode(self, s, _w)
    363 
    364         """
--> 365         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    366         end = _w(s, end).end()
    367         if end != len(s):

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.pyc in raw_decode(self, s, idx)
    381             obj, end = self.scan_once(s, idx)
    382         except StopIteration:
--> 383             raise ValueError("No JSON object could be decoded")
    384         return obj, end

ValueError: No JSON object could be decoded
1
  • 2
    That's because "data.txt" is not a valid JSON string. loads accepts the JSON data, not a file name. Commented Dec 1, 2015 at 0:56

3 Answers 3

23

You're trying to read the string "data.txt". What you want is to open and read the file.

import json

with open('data.txt', 'r') as data_file:
    json_data = data_file.read()

data = json.loads(json_data)
Sign up to request clarification or add additional context in comments.

Comments

11

Try:

data = json.load(open("data.txt", 'r'))

json.loads interprets a string as JSON data, while json.load takes a file object and reads it, then interprets it as JSON.

Comments

2

You need to open the file for reading and read it. To get the behavior you want:

with open('data.txt', 'r') as f:
    data = json.loads(f.read())

That should give you the json structure you want. Using with keeps you from having to close the file explicitly when you're finished.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.