Working With JSON in Python
The implementation of JSON in Python is small and concise, and you can read its source code (written in Python) at Lib/json.
Although similar looking, Python Dictionaries and JSON are quite different. Dictionaries are high-level Python Objects, while JSON is pure text.
We can go from one format to another using the four methods provided by the native JSON module in Python.
From JSON to Dictionaries
- Use
.loads()
to deserialize from a JSON string. - Use
.load()
to load a JSON file in memory.
Deserializing a JSON string, like an API response, to a Python Dictionary, with .loads()
.
import json
import requests
# Using the jsonplaceholder API to illustrate
api_json = requests.get('https://jsonplaceholder.typicode.com/todos/1')
type(api_json.text)
> str
print(api_json.text)
> '{\n "userId": 1,\n "id": 1,\n "title": "delectus aut autem",\n "completed": false\n}'
json_to_dict = json.loads(api_json.text)
print(json_to_dict)
> {'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
type(json_to_dict)
> dict
Loading a JSON file in memory while also converting it to Dictionaries:
import json
with open("data.json") as json_file:
json_data = json.load(json_file)
type(json_data)
> list
type(json_data[0])
> dict
From Dictionaries to JSON
- Use
.dumps()
to serialize to a JSON string. - Use
.dump()
to serialize to a JSON file or file-like object.
Serializing a dictionary to a JSON string with .dumps()
:
import json
user_dict = {'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
to_json = json.dumps(user_dict)
print(to_json)
> '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
type(to_json)
> str
Serializing a dictionary to a JSON file with .dump()
:
import json
with open("user_data_file.json", "w") as user_data_file:
json.dump(user_dict, user_data_file)
A file named user_data_file.json
must have been created.