总结 pythoneval 和json.loads()区别

mac2024-11-17  4

JSON有两种结构:

“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。 eval与json.loads都可以将大部分的JSON串转成python对象,但也有区别:

>>> import json >>> s = '{"one":1,"two":2}' >>> json.loads(s) {u'two': 2, u'one': 1} >>> eval(s) {'two': 2, 'one': 1} json.loads与eval都能将s转成python中的对象,json.loads将json中的字符串转成unicode(types.UnicodeType),eval转成了str(types.StringType)。 对于普通的数据类型,json.loads和eval都能用,但:

>>> x="[null,true,false,1]" >>> json.loads(x) [None, True, False, 1] >>> eval(x) Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File "<string>", line 1, in <module> NameError: name 'null' is not defined 在遇到特殊类型的时候,eval就不管用了。eval通常用来执行一个字符串表达式,并返回表达式的值。比如: >>> eval('1+1') 2 >>> json.loads('1+1') Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File "/usr/lib/python2.7/json/__init__.py", line 338, in loads     return _default_decoder.decode(s)   File "/usr/lib/python2.7/json/decoder.py", line 368, in decode     raise ValueError(errmsg("Extra data", s, end, len(s))) ValueError: Extra data: line 1 column 2 - line 1 column 4 (char 1 - 3)  

最新回复(0)