python对象和json对象之间有什么区别?

Ste*_*hen 9 javascript python django json node.js

从表面上看,python本身就使用了json.我能想到的唯一例外是json可以存储js函数.

这是我的问题:我需要通过终端将json传递给python文件.
为什么我应该或不应该只使用eval()?

bra*_*zzi 24

不,Python本身不使用JSON.你认为这些东西实际上是一个字典, Python中多种对象之一.在Python中构建字典的(简单)语法非常接近JSON,但它是偶然的.您可以这样创建字典:

a = {'a' : 2, 'b' : 3}
Run Code Online (Sandbox Code Playgroud)

你也可以用这种方式创建它:

a = dict([('a', 2), ('b', 3)]);
Run Code Online (Sandbox Code Playgroud)

那么,什么语法如此相似?好吧,JSON语法的灵感来自于数组的JavaScript语法.JavaScript语法很可能也激发了Python字典的编写方式,反之亦然.但是从不假设这三种语法--JavaScript,JSON和Python dicts - 是相同的或可互换的.

鉴于此,为什么不在eval()字典中使用转换JSON?首先,因为eval()可以在Python中执行任何操作 - 例如退出程序,删除文件,更改某些内部数据等等.因此,通过使用eval(),您可能会使自己容易受到代码注入的影响,具体取决于您使用它的方式.此外,eval()用于将JSON转换为dict假设两者的语法相同 - 这不一定是真的; 即使语法相同,它们也不可能存在.最后,有一种更好,更实用的方法来解析JSON:json模块:

>>> import json
>>> json.loads('{"a":1}')
{'a': 1}
Run Code Online (Sandbox Code Playgroud)

用它来解析你的JSON.

祝好运!


Ign*_*ams 18

JSON本身没有对象,也无法存储JavaScript函数.它的语法可能看起来类似于JavaScript文字,但尝试一直使用它只会导致痛苦.

而且不应该使用eval(); JavaScript和Python都有JSON解析器和序列化器可供使用.

  • `{(1,'a'):u'12345'}` (9认同)
  • 你应该注意的重要事情是**`eval()`会接受不是JSON的东西.** (7认同)
  • 好的谢谢!现在这很有道理,我只能看到它. (2认同)