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

Posted

技术标签:

【中文标题】python对象和json对象有啥区别?【英文标题】:what's the difference between python objects and json objects?python对象和json对象有什么区别? 【发布时间】:2011-07-31 21:26:57 【问题描述】:

从表面上看,python 似乎本机使用 json。我能想到的唯一例外是json可以存储js函数。

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

【问题讨论】:

“看来python原生使用json”?由于有一个单独的 json 库,我根本没有得到这个声明。似乎一个单独的库表明 JSON 不是 Python 语法的一流部分。 真正的问题应该是“python 对象文字语法和 JSON 之间有什么区别?”。另外,不要使用 eval - ***.com/a/1832957/397719 感谢您的回答@SpacedMonkey。我在 twitter 上观看了一个人的演讲(我相信)讨论 JSON.parse() 在某些情况下如何回退到 eval 以及经验法则如何只是经验法则。但是对于像我这样不想调查所有令人毛骨悚然的细节的人来说,不使用 eval 是正确的方法。 我不确定在这种情况下“通过终端将 json 传递给 python 文件”究竟是什么意思,但如果你不控制eval 的字符串,你可能会让自己容易受到code injection. 【参考方案1】:

不,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(),您可能会使自己容易受到code injection 的攻击,具体取决于你如何使用它。此外,使用eval() 将 JSON 转换为 dict 假设两者的语法相同——这不一定是真的;即使语法相同,它们也不可能在未来出现。最后,还有一种更好更实用的方式来解析 JSON:json 模块:

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

用它来解析你的 JSON。

祝你好运!

【讨论】:

【参考方案2】:

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

而且应该没有必要使用eval(); JavaScript 和 Python 都有现成的 JSON 解析器和序列化器。

【讨论】:

好吧,在 python 中使用eval() 似乎比导入额外的 json 库来解析序列化数据要容易得多。它似乎运作良好,但我应该注意什么? 您应该注意的重要一点是 eval() 将接受非 JSON 的内容。 除此之外,我只想知道区别。 python数据:'a':'b',json数据:'a':'b'……有什么区别? @S.Lott 为什么不呢?有什么区别?你能给我找个反例吗? 好的,谢谢!现在这很有意义,我只需要看到它。

以上是关于python对象和json对象有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

json对象和json字符串有啥区别啊

json和geojson有啥区别

json.load() 和 json.loads() 函数有啥区别

JAVA对象转换成JSON字符串与JAVA String有啥区别

json.dumps 和 json.load 有啥区别? [关闭]

“JSON.parse”和“JSON.stringify”有啥区别?