On the surface it appears that python uses json natively. The only exception I can think of is the fact that json can store js functions.
Here's my issue:
I need to pass json to a python file through the terminal.
Why should or shouldn't I just use eval()?
No, Python does not use JSON natively. This stuff you think is JSON is, in fact, a dictionary, one of many kinds of objects in Python. The (easy) syntax for building a dictionary in Python is pretty close to JSON but it is incidental. As you can create a dictionary this way:
a = {'a' : 2, 'b' : 3}
you can create it this way, too:
a = dict([('a', 2), ('b', 3)]);
So, what are the syntaxes so similar? Well, JSON syntax is inspired by JavaScript syntax for arrays. It is likely that the JavaScript syntax also inspired the way Python dictionaries are written or vice versa. But never assumes these three syntaxes – JavaScript, JSON and Python dicts - to be the same or interchangeable.
Given that, why should you not use eval()
for convert JSON in a dictionary? Firstly, because eval()
can do anything in Python – such as exiting the program, removing a file, changing some internal data etc. etc. Hence, by using eval()
, you might make yourself vulnerable to code injection, depending on how you use it. Also, using eval()
for converting JSON to a dict assumes the syntax of both are identical – which is not necessarily true; even if the syntaxes were identical, they cannot be in the future. Finally, there is a much better and more practical way to parse JSON: the json
module:
>>> import json
>>> json.loads('{"a":1}')
{'a': 1}
Use it to parse your JSON.
Good luck!
JSON does not have objects per se, and cannot store JavaScript functions. Its syntax may appear similar to JavaScript literals, but trying to use it as such all the time will cause nothing but pain.
And there should be no need to use eval()
; both JavaScript and Python have JSON parsers and serializers readily available.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With