python对象和json对象有何区别?

12 投票
2 回答
13707 浏览
提问于 2025-04-16 15:17

表面上看,Python 好像是直接支持 JSON 的。唯一的例外就是 JSON 可以存储 JavaScript 的函数。

我遇到的问题是:
我需要通过终端把 JSON 传给一个 Python 文件。
我为什么应该或者不应该直接用 eval() 呢?

2 个回答

27

不,Python 并不是原生支持 JSON。你认为的 JSON 实际上是一个字典,这是 Python 中众多对象之一。在 Python 中创建字典的语法和 JSON 很相似,但这只是巧合。你可以这样创建一个字典:

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

你也可以这样创建:

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

那么,为什么这两种语法看起来这么相似呢?其实,JSON 的语法是受 JavaScript 数组语法的启发。很可能 JavaScript 的语法也影响了 Python 字典的写法,或者反过来。但千万不要认为这三种语法——JavaScript、JSON 和 Python 字典——是一样的或可以互换的。

那么,为什么不应该用 eval() 来把 JSON 转换成字典呢?首先,因为 eval() 在 Python 中可以做任何事情,比如退出程序、删除文件、修改一些内部数据等等。因此,使用 eval() 可能会让你面临 代码注入 的风险,这取决于你怎么使用它。此外,使用 eval() 来转换 JSON 为字典是基于两者语法相同的假设——但这并不一定成立;即使语法相同,将来也可能不相同。最后,有一种更好、更实用的方法来解析 JSON:使用 json 模块:

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

用它来解析你的 JSON。

祝你好运!

18

JSON其实并没有真正的对象,也不能存储JavaScript的函数。它的写法看起来和JavaScript的字面量很像,但如果你总是把它当成JavaScript来用,结果只会让你很痛苦。

而且其实也不需要用eval()这个东西;JavaScript和Python都有现成的工具可以用来解析和生成JSON数据。

撰写回答