在python中eval表示的数据类型是_Python中的字典和json的比较和eval内置方法

Python中的字典,json模块,eval

说到python中的字典真的和json数据很类似,且json被绝大部分各类开发者所使用,而eval和这2者什么关系,下面是我的总结

DICT字典 VS Json

dcit,是python中字典数据类型,有了dict可以很方便的对结构化解析数据,有点像最小化的关系型数据库,是key对于value比如

1a = {'name': '兔纸', 'class': 'One'} #可用单引号和双引号

json,是数据交换格式,JSON语法是JavaScript对象表示语法的子集,规范是:数据在键值对中,数据由逗号分隔,花括号保存对象,方括号保存数组,且必须要用双引号包裹字符串,这是官方的说明其中有一段是”A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes. A character is represented as a single character string. A string is very much like a C or Java string.” 本文总结只是涉及python 中dict和json的区别以及转换相关

1a = {"name": "兔纸", "class": "One"} #只能是双引号

我们看看区别(To Do)

json

python-dict

只能用双引号包裹字符串

单引号和双引号都可以包裹字符串

json 可以是这样子[{“name”:x},{“age”:2}]

在python中[{“name”:x},{“age”:2}] 叫列表里面有2个字典的元素

如果python中的字典中都是用双引号来包裹字符串的,json才可以解析

python 可以把json数据直接当成字典或者列表使用

所谓的python的dict和json相互操作转换

python中把字典转换从json格式或者相互操作,这是伪命题:因为python可以直接把json数据拿来用的,那转个毛呢?

比如:我们把{“name”:x},{“age”:2} 这种数据需要写入到文件且要保证这种数据格式,我们希望下次读取可以直接当成字典来用

首先要把这个数据变成字符串然后写到文件中,读取的时候{“name”:x},{“age”:2} 就变成了一个字符串,我们需要把这个数据格式化为字典格式来用

又比如:我们调用外包http接口,对方吐出的json格式数据,但是http 去读取回来 也是一个字符串,我们同样想办法转成字典来操作

这时候就需要python 的默认lib库json,因为json数据格式 python可以直接拿来当字典用,其实是json格式数据和字符串相互转换

一般是用python的lib json,在python2.4中这个模块叫simplejson

这里拿json模块来举例

1

2

3

4

5

6

7

8

9

10

11

12import json

print([ i for i in dir(json) if not i.startswith('_')]) # 打印出这个json模块下面的方法

['JSONDecoder', 'JSONEncoder', 'decoder', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']

a = '{"name":"Seal","age":99}' #显然这是一个字符串

x = json.loads(a) # 使用json.loads 格式化为json数据或者叫转成字典

type(x)

dict

b = {"name":"Seal","age":99}

y = json.dumps(b) # 使用json.dumps 把一个json格式数据或者叫字典转为字符串

type(y)

str

那python中字典同样可以用单引号的,这个时候则么办呢?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41import json

a = "{'name':'Seal','age':99}" #显然这是一个字符串

x = json.loads(a) # 我们再次使用json模块的loads方法,就会出现下面的错误

'''

ValueError Traceback (most recent call last)

in ()

----> 1 x = json.loads(a)

/usr/lib64/python2.7/json/__init__.pyc in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)

336 parse_int is None and parse_float is None and

337 parse_constant is None and object_pairs_hook is None and not kw):

--> 338 return _default_decoder.decode(s)

339 if cls is None:

340 cls = JSONDecoder

/usr/lib64/python2.7/json/decoder.pyc in decode(self, s, _w)

363

364 """

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

366 end = _w(s, end).end()

367 if end != len(s):

/usr/lib64/python2.7/json/decoder.pyc in raw_decode(self, s, idx)

379 """

380 try:

--> 381 obj, end = self.scan_once(s, idx)

382 except StopIteration:

383 raise ValueError("No JSON object could be decoded")

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

No JSON object could be decoded

这说明的很明白,没有找到JSON的对象,因为用了单引号 并不是json格式数据了,当然就不能使用json的这个方法了

'''

'''

这时候eval出场了,eval是一个把你输入的字符串进行表达的函数,且还有2个参数是global 和local 全局是局部的属性

说简单点你输入是什么就返回的什么,比如 a="1+2" eval(a) 输出不是"1+2" 而是3,

eval()表达了1+2.在python中1+2 是数学运算所以输出是3,None和布尔是不能用eval()来表达了,

当然比如 a=' ' ,或者 a= '\n' 这种也同样不能被表达,

eval()能做的还有很多,这里不做展开了.有兴趣可以自己度娘一下 "eval()不安全"

'''

a = "{'name':'Seal','age':99}"

y = eval(a)

type(t)

dict

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值