Python json.loads doesn't work
Question: I've been trying to figure out how to load JSON objects in Python.

    
    
       def do_POST(self):
        length = int(self.headers['Content-Length'])
        decData = str(self.rfile.read(length))
        print decData, type(decData)
        "{'name' : 'journal2'}" <type 'str'>
        postData = json.loads(decData)
        print postData, type(postData)
        #{'name' : 'journal2'} <type 'unicode'>
        postData = json.loads(postData)
        print postData, type(postData)
        # Error: Expecting property name enclosed in double quotes
    

Where am I going wrong?

**Error Code (JScript):**

    
    
    var data = "{'name':'journal2'}";
    var http_request = new XMLHttpRequest();
    http_request.open( "post", url, true );
    http_request.setRequestHeader('Content-Type', 'application/json');
    http_request.send(data);
    

**True Code (JScript):**

    
    
    var data = '{"name":"journal2"}';
    var http_request = new XMLHttpRequest();
    http_request.open( "post", url, true );
    http_request.setRequestHeader('Content-Type', 'application/json');
    http_request.send(JSON.stringify(data));
    

**True Code (Python):**

    
    
       def do_POST(self):
        length = int(self.headers['Content-Length'])
        decData = self.rfile.read(length)
        postData = json.loads(decData)
        postData = json.loads(postData)
    


Answer: Your JSON data is enclosed in extra quotes making it a JSON string, _and_ the
data contained within that string is _not_ JSON.

Print `repr(decData)` instead, you'll get:

    
    
    '"{\'name\' : \'journal2\'}"'
    

and the JSON library is correctly interpreting that as one string with the
literal contents `{'name' : 'journal2'}`. If you stripped the outer quotes,
the contained characters are not valid JSON, because JSON strings must always
be enclosed in double quotes.

For all the `json` module is concerned, `decData` could just as well have
contained `"This is not JSON"` and `postData` would have been set to `u'This
is not JSON'`.

    
    
    >>> import json
    >>> decData = '''"{'name' : 'journal2'}"'''
    >>> json.loads(decData)
    u"{'name' : 'journal2'}"
    >>> json.loads(json.loads(decData))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 326, in loads
        return _default_decoder.decode(s)
      File "/opt/local/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 "/opt/local/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)
    

Fix whatever is producing this string, your view is fine, it's the input that
is broken.

