About JSON
JSON (JavaScript Object Notation) is a file format and data storage standard that uses key-value pairs to store and exchange data. It is the most widely used data exchange format, often seen in RESTful APIs, lightweight databases, config files, and other offline or online software that needs to store, retrieve and exchange data. Most programming languages include libraries to parse and write JSON data by default and JSON is a programming language agnostic data format. Values stored in a JSON file or payload usually contain strings, numbers and serializable data types like lists (arrays).
JSON and Python Dictionaries
JSON data in python is converted into a dictionary object by using “load” method. It is often seen that some people equate json data and a python dictionary, as the syntax to define both of them is nearly the same. However, json data is nothing but a text string structured in a rigid syntax while a python dictionary is a data structure object stored in memory. If you want to store dictionary data in a text file or send it to another non-python program, you will have to first convert it into a text string (bytes). This dumped / converted text string is defined in JSON’s standard syntax and the process of converting a python dictionary into a json compatible string is called serialization.
Reading and Dumping JSON Data in Python
JSON data can be retrieved as a response form a server, read from file, sliced from URL query parameters and so on. This article will mainly focus on reading json data from a locally stored file. Let’s assume that a “test.json” file contains following data:
To read the test.json file in python, you can use the code below:
with open ("test.json") as f:
data = json.load(f)
dump = json.dumps(data)
print (data)
print (type(data))
print (dump)
print (type(dump))
The first line in the above code imports json module. In the next line, “with open” is used to safely read the file contents. Within the “with open” block, “json.load” method is used to read and store file contents in the “data” variable. Data loaded in the previous step is converted back into json string using the “json.dump” method. Running the code above will show the following output:
<class 'dict'>
{"codename": "Eoan Ermine", "version": "Ubuntu 19.10"}
<class 'str'>
Notice in the output above that the “json.load” method reads raw json data into a python dictionary while “json.dumps” methods converts a dictionary into a string that is compatible with JSON structure. Once a JSON object has been converted into a python dictionary object, you can use built-in python dictionary methods to handle the data. The example above is pretty basic and doesn’t include arrays in JSON data or nested values. However within python, you can handle these values like any other nested dictionaries and lists.
Sorting and Pretty Printing JSON Data
The “json.dump” method supports some optional parameters for sorting keys and pretty printing the output for improved readability.
with open ("test.json") as f:
data = json.load(f)
dump = json.dumps(data, sort_keys=True, indent=4)
print (dump)
The code above will show the following output:
"codename": "Eoan Ermine",
"version": "Ubuntu 19.10"
}
Data Type Conversions
The list below illustrates how JSON values are converted into python objects and vice versa.
JSON | Python |
string | str |
number | int or float |
true, false | True, False |
null | None |
array | list |
object | dict |
Json.tool Command Line Module
Python includes a nice command line utility “json.tool” that can be used to validate and pretty print JSON strings and files.
Running the command above will show you following output:
"codename": "Eoan Ermine",
"version": "Ubuntu 19.10"
}
You can also use json.tool with JSON files. Replace “in_file” and “out_file” in the command below with your desired values:
Other than pretty printing, sorting and validating JSON data, json.tool doesn’t do anything else. So if you want to manipulate any JSON data, you have to write your own custom code using the built-in JSON module.