表面上看来python本身使用json。我能想到的唯一例外是json可以存储js函数。
这是我的问题: 我需要通过终端将json传递给python文件 为什么我应该或不应该只使用eval()?
答案 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解析器和序列化器可供使用。