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.load() 和 json.loads() 函数有啥区别
JAVA对象转换成JSON字符串与JAVA String有啥区别