JSON in Python
Anže Pečar
Posted on February 1, 2020
The JavaScript Object Notation (JSON) is a lightweight data-interchange format that just so happens to be remarkably similar to Python's dict notation.
The two are so similar that you can copy JSON and paste it in the middle of your Python program and it will usually work:
>>> {
... "my_object": {
... "my_list": [1, "2", 3.0, 4.0e10]
... },
... "my_string": {
... "escaping": "\"\" 🤔"
... }
... }
{'my_object': {'my_list': [1, '2', 3.0, 40000000000.0]}, 'my_string': {'escaping': '"" 🤔'}}
Unfortunately, this breaks down whenever you have those pesky booleans or nulls in your JSON:
>>> {
... "my_null": null,
... "my_bool": true,
... "my_second_bool": false
... }
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
NameError: name 'null' is not defined
At this point, you might be tempted to do a search and replace that turns null
, true
& false
into Python's None
, True
& False
, but that's tedious and gets really annoying if you want to copy paste back and forth.
You could even be reasonable and use json.loads
but then your JSON would be a string and your editor would no longer color highlight it correctly:
>>> import json
>>> json.loads("""
... {
... "my_null": null,
... "my_bool": true,
... "my_second_bool": false
... }
... """)
{'my_null': None, 'my_bool': True, 'my_second_bool': False}
Because colors are the most important thing in programming, there has to be a better way! And there is. Python allows us to use null
, true
and false
as regular variable names. This means that we can do something like this:
>>> null=None; true=True; false=False
>>> {
... "my_null": null,
... "my_bool": true,
... "my_second_bool": false
... }
{'my_null': None, 'my_bool': True, 'my_second_bool': False}
Marvelous, isn't it? You can even put null=None; true=True; false=False
in a separate python file (let's call PJ.py as a shorthand for PythonJson). Now you can do:
>>> from PJ import *
And your python file will be ready to accept JSON!
Do make sure you wear a PJ like the one below when doing this, otherwise, people might think you are being serious 😅
"#ViernesDePijamas" by mrl.itesm2 is licensed under CC BY-NC-SA 2.0
Posted on February 1, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.