Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

what's the difference between python objects and json objects?

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()?

like image 538
Stephen Avatar asked Apr 07 '11 17:04

Stephen


2 Answers

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!

like image 83
3 revs, 2 users 93% Avatar answered Oct 04 '22 02:10

3 revs, 2 users 93%


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.

like image 40
Ignacio Vazquez-Abrams Avatar answered Oct 04 '22 02:10

Ignacio Vazquez-Abrams