关于javascript:python对象和json对象有什么区别?

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

从表面上看,Python本机使用JSON。我能想到的唯一例外是JSON可以存储JS函数。

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


不,python本机不使用json。实际上,您认为JSON是一个字典,是Python中多种对象之一。在Python中构建字典的(简单)语法与JSON非常接近,但它是偶然的。正如您可以这样创建字典:

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

您也可以这样创建它:

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

那么,什么语法如此相似呢?好吧,JSON语法的灵感来自于数组的JavaScript语法。JavaScript语法可能也启发了编写Python字典的方式,反之亦然。但决不要假定这三种语法(javascript、json和python dicts)是相同或可互换的。

既然如此,为什么不应该在字典中使用eval()来转换json?首先,由于eval()可以在python中执行任何操作,例如退出程序、删除文件、更改一些内部数据等。因此,通过使用eval(),您可能会使自己容易受到代码注入的攻击,这取决于您如何使用它。另外,使用eval()将json转换为dict时,假定两者的语法相同,但这不一定是正确的;即使语法相同,它们将来也不会相同。最后,还有一种更好、更实用的方法来解析JSON:json模块:

1
2
3
>>> import json
>>> json.loads('{"a":1}')
{'a': 1}

使用它来解析JSON。

祝你好运!


JSON本身没有对象,不能存储JavaScript函数。它的语法可能看起来类似于javascript文本,但是一直试图这样使用它只会带来痛苦。

而且不需要使用eval();javascript和python都有随时可用的JSON解析器和序列化器。