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

12,187

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!

Share:
12,187

Related videos on Youtube

Stephen
Author by

Stephen

Updated on September 01, 2020

Comments

  • Stephen
    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
      SpacedMonkey about 11 years
      Really 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
    Stephen about 13 years
    well, 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
    Ignacio Vazquez-Abrams about 13 years
    The big thing you should watch for is that eval() will accept things that are not JSON.
  • Stephen
    Stephen about 13 years
    well besides that, I just want to know the difference. python data: {'a':'b'}, json data: {'a':'b'} ... what's the difference?
  • Ignacio Vazquez-Abrams
    Ignacio Vazquez-Abrams about 13 years
    The latter is not JSON, since it's not a string.
  • Stephen
    Stephen about 13 years
    oh ok, I think I might be getting what you're saying now. It's pretty subtle, but yeah.
  • Stephen
    Stephen about 13 years
    maybe you could answer me this: if in python I put a = {'b':'c'}, then couldn't I just serialize a to json by putting str(a)? It looks right
  • user1066101
    user1066101 about 13 years
    @Stephen: Generally? No. In that specific case, it happens to work out.
  • Stephen
    Stephen about 13 years
    @S.Lott why not? what is the difference? could you find me a counter example?
  • Stephen
    Stephen about 13 years
    Ok thank you! That makes perfect sense now, I just had to see it.
  • d-coder
    d-coder about 6 years
    The comments here are so much revealing!

Related