Overview
JavaScript Object Notation (JSON) is written in plain-text that is very useful to store objects in a structured format. Python has a module that can parse and update JSON objects. Be mindful that these are two different languages being involved, translating back and forth between Python and JSON can sometimes compromise the integrity of the original objects.
Serialize / Serialization / Marshaling
This is the process of transforming data into series of bytes. In this context, we are referring to the Python dictionaries (objects) being transcoded and written into .json files. Here is a map between language of Python and JSON.
marshall and pickle modules can also serve similar purposes. Usage of those related modules is out of scope of this document.
Python | JSON |
---|---|
dict |
object |
list , tuple |
array |
str |
string |
int , long , float |
number |
True |
true |
False |
false |
None |
null |
Deserialization
The reciprocal process is called serialization. Here is that reversal transcoding table:
JSON | Python |
---|---|
object |
dict |
array |
list |
string |
str |
number (int) |
int |
number (real) |
float |
true |
True |
false |
False |
null |
None |
dump() function
This takes two positional arguments: (1) the data object to be serialized, and (2) the file-like object to which the bytes will be written.
dumps() function
Unlike dump(), this only takes 1 argument. dump() doesn’t write to disk.
load() function
Deserialize results of an embedded .read()
-function, supporting file-like object containing a JSON document to a Python object using the conversion table. Here is the syntax
json.load(open(someFile.json)[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
loads() function
The s stands for string. The json.loads() function does not take the file path, but the file contents as a string. The result shall be a str or unicode instance containing a pointer to JSON document.
Illustrations
Contents of ./dictionary.json
{
"cover": "Paperback"
"pages": 1754
"version": "1.24"
}
Use the keyword ‘with‘ to close session as soon as function goes out of scope. Open a sample JSON object as read-only. alias it as jsonDictionary. parse jsonDictionary contents into parsedDictionary using the loads() function.
with open("./dictionary.json","r") as jsonDictionary:
parsedDictionary = json.loads(jsonDictionary)
Put the contents of the parsed json object’s property into temporary memory.
version = parsedDictionary["version"]
Change value of Python library’s property
parsedDictionary["version"]=1.25
Write back to JSON file (overwrite original)
with open(".\dictionary.json", "w") as jsonDictionary:
json.dumps(parsedDictionary, jsonDictionary)
An alternative to previous function: open as read/write then edit JSON file directly
with open(".\dictionary.json", "r+") as jsonDictionary:
parsedDictionary = json.loads(jsonDictionary)
version = parsedDictionary["version"]
parsedDictionary["version"] = 1.25
jsonDictionary.seek(0) # user seek() method move cursor back to beginning
json.dumps(parsedDictionary, jsonDictionary) # merge the contents of original and parsed objects
jsonDictionary.truncate() # clean up the variance after the merger between parsed and original JSON
How to change the indentation and separator markers of JSON file
import json
library = {
"cover": "Paperback"
"pages": 1754
"version": "1.24"
}
# use . and a space to separate objects, and a space, a = and a space to separate keys from their values:
json.dumps(library, indent=4, separators=(", ", " = "))