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

时间:2011-04-07 17:14:09

标签: javascript python django json node.js

表面上看来python本身使用json。我能想到的唯一例外是json可以存储js函数。

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

2 个答案:

答案 0 :(得分:24)

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

a = {'a' : 2, 'b' : 3}

你也可以这样创造它:

a = dict([('a', 2), ('b', 3)]);

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

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

{{1}}

用它来解析你的JSON。

祝你好运!

答案 1 :(得分:18)

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

并且不需要使用eval(); JavaScript和Python都有JSON解析器和序列化器可供使用。