Quotes causing problem with Python and simplejson

Grab the feed

School is a twelve-year jail sentence where bad habits are the only curriculum truly learned.

John Taylor Gatto

Recent comments

Python logoMy little Django and Facebook project needed to do some JSON processing, time for using simplejson then.

My application will receive a string of JSON and transform it to a dictionary, pretty simple. Let's run a test first, starting with the Python shell, or better yet, iPython, and importing the module:

import simplejson

Now let's define a string using JSON notation and pass it to simplejson:

band = "{'name': 'Mando Diao', 'genre': 'rock and roll', 'bid': 19383}"
json = simplejson.loads(band)

And we get a ValueError exception. Let's try using simple quotes for enclosing the whole string and double quotes for the JSON keys and values:

band = '{"name": "Mando Diao", "genre": "rock and roll", "bid": 19383}'
json = simplejson.loads(band)

And there you go, no error now:

print json
{u'genre': u'rock and roll', u'bid': 19383, u'name': u'Mando Diao'}

I find a little strange that this problem happens as I've been using either type of quotes for most of my Python coding. Had you noticed this problem? I've checked simplejson's documentation and could not find anything related to this.

One last word, the new Python 2.6 includes a json module, which is a refactored simplejson. Neat.

Join the conversation

read the json spec at

read the json spec at json.org ... it requires double quotes for keys.

You might have gotten this

You might have gotten this sorted out by now, but the JSON format reuqires you to use "(double quotes)

If you are use this in Django

If you are use this in Django Framework! look this:

class JSONFormField(FeincmsJSONFormField):

def prepare_value(self, value):
if value or value == {}:
value = json.dumps(value)
return value

class JSONField(FeincmsJSONField)
...
def formfield(self, kwargs):
kwargs['form_class'] = JSONFormField
return super(FeincmsJSONField, self).formfield(
kwargs)

Keep your comments relevant, written in good English and don't spam. Let's create useful and valuable discussions. Markdown is welcome.

Add your comment