Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trying to parse JSON in Python. ValueError: Expecting property name [duplicate]

I am trying to parse a JSON object into a Python dict. I've never done this before. When I googled this particular error, (What is wrong with the first char?), other posts have said that the string being loaded is not actually a JSON string. I'm pretty sure this is, though.

In this case, eval() works fine, but I'm wondering if there is a more appropriate way?

Note: This string comes directly from Twitter, via ptt tools.

>>> import json
>>> line = '{u\'follow_request_sent\': False, u\'profile_use_background_image\': True,
         u\'default_profile_image\': False, 
         u\'verified\': False, u\'profile_sidebar_fill_color\': u\'DDEEF6\',
         u\'profile_text_color\': u\'333333\', u\'listed_count\': 0}'
>>> json.loads(line)

Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
     File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 326, in loads
       return _default_decoder.decode(s)
     File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode
       obj, end = self.raw_decode(s, idx=_w(s, 0).end())
     File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode
       obj, end = self.scan_once(s, idx)
   ValueError: Expecting property name: line 1 column 1 (char 1)
like image 957
gabe Avatar asked Feb 08 '12 04:02

gabe


People also ask

What is JSON dump Python?

The dump() method is used when the Python objects have to be stored in a file. The dumps() is used when the objects are required to be in string format and is used for parsing, printing, etc, . The dump() needs the json file name in which the output has to be stored as an argument.

How do you convert a string to a JSON object in Python?

Use the json.loads() function. The json. loads() function accepts as input a valid string and converts it to a Python dictionary. This process is called deserialization – the act of converting a string to an object.

What is the difference between JSON load and loads?

The json. load() is used to read the JSON document from file and The json. loads() is used to convert the JSON String document into the Python dictionary. fp file pointer used to read a text file, binary file or a JSON file that contains a JSON document.

Does JSON allow single quotes?

Strings in JSON are specified using double quotes, i.e., " . If the strings are enclosed using single quotes, then the JSON is an invalid JSON .


2 Answers

That's definitely not JSON - not as printed above anyhow. It's already been parsed into a Python object - JSON would have false, not False, and wouldn't show strings as u for unicode (all JSON strings are unicode). Are you sure you're not getting your json string turned into a Python object for free somewhere in the chain already, and thus loading it into json.loads() is obviously wrong because in fact it's not a string?

like image 68
Nick Bastin Avatar answered Sep 21 '22 03:09

Nick Bastin


Sometimes you can have this error because your string values are not well recognized by python. As an example: I've spent quite a lot of time searching for the origin of this kind of error. Here is what I found.

Sometimes a language recognizes a kind of quotes and not another one: btw, to parse a string in to json in JavaScript all quotes have to be in the ' format

to parse a string into json in JavaScript all quotes have to be in the " format which is not really logic.

Hopefully you can use the replace function. For Python:

json.loads(s.replace("\'", '"'));

Hope it will save you the time I've spent hunting this bug!

like image 26
gronaz Avatar answered Sep 24 '22 03:09

gronaz