what's the difference between python objects and json objects?
Solution 1
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.
Solution 2
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!
Related videos on Youtube
Stephen
Updated on September 01, 2020Comments
-
Stephen over 3 years
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()?-
SpacedMonkey about 11 yearsReally the question should be something like 'What is the difference between python object literal syntax and JSON?'. Also, don't use eval - stackoverflow.com/a/1832957/397719
-
-
Stephen about 13 yearswell, using
eval()
in python seems to be a lot easier to do than importing extra json libraries to parse serialized data. It seems to work well, but what are the things I should watch out for? -
Ignacio Vazquez-Abrams about 13 yearsThe big thing you should watch for is that
eval()
will accept things that are not JSON. -
Stephen about 13 yearswell besides that, I just want to know the difference. python data:
{'a':'b'}
, json data:{'a':'b'}
... what's the difference? -
Ignacio Vazquez-Abrams about 13 yearsThe latter is not JSON, since it's not a string.
-
Stephen about 13 yearsoh ok, I think I might be getting what you're saying now. It's pretty subtle, but yeah.
-
Stephen about 13 yearsmaybe you could answer me this: if in python I put
a = {'b':'c'}
, then couldn't I just serializea
to json by puttingstr(a)
? It looks right -
user1066101 about 13 years@Stephen: Generally? No. In that specific case, it happens to work out.
-
Stephen about 13 years@S.Lott why not? what is the difference? could you find me a counter example?
-
Stephen about 13 yearsOk thank you! That makes perfect sense now, I just had to see it.
-
d-coder about 6 yearsThe comments here are so much revealing!