Python中的json模块

Posted 乱斗西

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中的json模块相关的知识,希望对你有一定的参考价值。

在Python内置函数中,有一个eval()函数可以将字符串内容转换成Python对象,比如我现在将一个字典 dic = {"name":"pengfy"}写到一个叫hello的文件中,再读取出来的结果就变成字符串了,在json中,json.loads也有一样的作用,但是在一些特殊情况下,eval就不适用了,这时候还是要专业的json模块进行转换。

# 写入文件
dic=\'{"name":"pengfy"}\'
f=open("hello","w")
f.write(dic)

# eval()方法
f_read=open("hello","r")
data=f_read.read()
print(type(data))    #  <class \'str\'>
data=eval(data)
print(data["name"]) # pengfy

# json方法
f_read=open("hello","r")
data = json.loads(f_read.read())
print(data)   #{\'name\': \'pengfy\'}
print(data[\'name\'])   # pengfy

JSON

对web开发有兴趣的同学都知道,如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:

 

 序列化

       序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

下面使用json演示序列化过程:

import json

# 序列化
dic={\'name\':\'alex\'}
f=open("new_hello","w")

dic_str=json.dumps(dic)
f.write(dic_str)    #这里和json.dump(dic,f)作用一样

以上需要强调几点:

   dic中的内容都是单引号,但是写入文件后,都会变成双引号,不信可以试试。这里面变化就是:

{\'name\':\'pengfy\'}---->{"name":"pengfy"}---->\'{"name":"pengfy"}\'
上面光说的字典,其他数据也是一样的,比如:
 i=8                 ---->\'8\'
s=\'hello\' ---->"hello"----->\'"hello"\'
l=[11,22] ---->"[11,22]"
下面看一下json怎么反序列化的:
f_read=open("new_hello","r")
data=json.loads(f_read.read())      # data=json.load(f)

print(data["name"])  # pengfy
print(data)          #{\'name\': \'pengfy\'}
print(type(data))    #<class \'dict\'>

我们看到上面的dumps和loads,dump和load都是成双成都出现的,但是只要满足json格式要求,都可以直接用loads或load导出来,比如:

dic_str = "{\'name\':\'pengfy\'}"
data = json.loads(dic_str)
print(data)   #直接报错

dic_str = \'{"name":"pengfy"}\'
data = json.loads(dic_str)
print(data)  #{\'name\': \'pengfy\'}

这么看来,json模块也可以简单的掌握。



 

以上是关于Python中的json模块的主要内容,如果未能解决你的问题,请参考以下文章

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

python中的模块,库,包有啥区别

Python 常用模块学习

python常用代码片段总结

如何从片段中的 JSON 响应中的对象获取数据

常用python日期日志获取内容循环的代码片段