["python","json","django"]
How to convert JSON data into a Python object?

I want 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?
UPDATE With Python3, you can do it in one line, using SimpleNamespace and object_hook: import json from types import SimpleNamespace data = '{"name": "John Smith", "hometown": {"name": "New York", "id": 123}}' # Parse JSON into an object with attributes corresponding to dict keys. x = json.loads(data, object_hook=lambda d: SimpleNamespace(**d)) # Or, in Python 3.13+: # json.loads(data, object_hook=SimpleNamespace) print(x.name, x.hometown.name, x.hometown.id) OLD ANSWER (Python2) In Python2, you can do it in one line, using namedtuple and object_hook (but it's very slow with many nested objects): import json from collections import namedtuple data = '{"name": "John Smith", "hometown": {"name": "New York", "id": 123}}' # Parse JSON into an object with attributes corresponding to dict keys. x = json.loads(data, object_hook=lambda d: namedtuple('X', d.keys())(*d.values())) print x.name, x.hometown.name, x.hometown.id or, to reuse this easily: def _json_object_hook(d): return namedtuple('X', d.keys())(*d.values()) def json2obj(data): return json.loads(data, object_hook=_json_object_hook) x = json2obj(data) If you want it to handle keys that aren't good attribute names, check out namedtuple's rename parameter.