我是靠谱客的博主 紧张楼房,最近开发中收集的这篇文章主要介绍python中eval和float_python中eval与json.loads对json的处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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不会报错,强烈推荐,这个问题困扰了我一晚上。

对于普通的数据类型,json.loads和eval都能用,但:

>>> x="[null,true,false,1]"

>>> json.loads(x)

[None, True, False, 1]

>>> eval(x)

Traceback (most recent call last):

File "", line 1, in

File "", line 1, in

NameError: name 'null' is not defined

在遇到特殊类型的时候,eval就不管用了。eval通常用来执行一个字符串表达式,并返回表达式的值。比如:

>>> eval('1+1')

2

>>> json.loads('1+1')

Traceback (most recent call last):

File "", line 1, in

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)

json字符串转python对象的数据类型转换表    python对象转json字符串类型转换表

JSON

Python

object

dict

array

list

string

unicode

number (int)

int, long

number (real)

float

true

True

false

False

null

None

Python

JSON

dict

object

list, tuple

array

str, unicode

string

int, long, float

number

True

true

False

false

None

null

>>> dct = {'one':None,'two':2}

>>> json.dumps(dct)

'{"two": 2, "one": null}'

>>> arry = [True, False, 'hello']

>>> json.dumps(arry)

'[true, false, "hello"]'

另,需要注意的是:

>>> dct="{'one':1}"

>>> json.loads(dct)

Traceback (most recent call last):

File "", line 1, in

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 365, in decode

obj, end = self.raw_decode(s, idx=_w(s, 0).end())

File "/usr/lib/python2.7/json/decoder.py", line 381, in raw_decode

obj, end = self.scan_once(s, idx)

ValueError: Expecting property name: line 1 column 2 (char 1)

报错是因为json不认单引号,json中的字符串需要用双引号包起来。

最后

以上就是紧张楼房为你收集整理的python中eval和float_python中eval与json.loads对json的处理的全部内容,希望文章能够帮你解决python中eval和float_python中eval与json.loads对json的处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部