Zach Wild Zach Wild - 6 months ago 32
JSON Question

How to convert JSON data into a Python object

I want to use Python to convert JSON data into a Python Object.

I receive JSON data objects from the Facebook API, which I want to store in my Database.

My current View in Django ( python ) ( request.POST contains the JSON )->

response = request.POST
user = FbApiUser(user_id = response['id'])
user.name = response['name']
user.username = response['username']
user.save()


This works fine, but how do I handle complex JSON data objects?

Wouldn't it be much better if I could somehow convert this JSON object into a python object for easy use?

Answer

Check out the section labeled "Specializing JSON object decoding" in the json module docs ( http://docs.python.org/library/json.html for Python v2.7.3 )- there's a section on specialized object decoding. You can use that to decode a JSON object into a specific Python type.

Here's an example:

class User(object):
    def __init__(self, name, username):
        self.name = name
        self.username = username

import json
def object_decoder(obj):
    if '__type__' in obj and obj['__type__'] == 'User':
        return User(obj['name'], obj['username'])
    return obj

json.loads('{"__type__": "User", "name": "John Smith", "username": "jsmith"}', object_hook=object_decoder)

print type(User)
>>>> <class '__restricted__.User'>

Update

If you want to access data in a dictionary via the json module do this:

user = json.loads('{"__type__": "User", "name": "John Smith", "username": "jsmith"}')
print user['name']
print user['username']

Just like a regular dictionary.