Python学海无涯路【第27回】:json模块


1、什么是序列化

  • 把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。
  • 序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
  • 把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

2、什么是JSON

  • 要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
  • JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:
JSON类型Python类型
数字int或float
字符串str
逻辑值,true/falseTrue/False
数组,[]list
对象 ,{}dict
nullNone

3、JSON的四个功能

3.1、dumps

将字符串转换为JSON字符串,即转换成所有程序语言都认识的字符串,即转换成带双引号的字符串(python中的字符串可以用单引号)。
例一:
所有的单引号全部替换成双引号

import json

i=8
i=json.dumps(i)		#"8"
print(type(i),"\t"*3,i)
s=’hello‘
s=json.dumps(s)		#'"hello"',所有的单引号都会替换成双引号
print(type(s),"\t"*3,s)
l=[1,2]
l=json.dumps(l)		#"[1,2]"
print(type(l),"\t"*3,l)

输出:
<class ‘str’>           8
<class ‘str’>           “hello”
<class ‘str’>            [1, 2]

例二:
转换成序列化对象写入文件。

import json

dic={"name":"chuhe","age":"20"}   #类型是<class 'dict'>
j=json.dumps(dic)                 #类型是#<class 'str'>
f=open("json.txt","w")
f.write(j)
f.close()

执行,并输出:
在这里插入图片描述

3.2、loads

将json编码的字符串转换为python的数据结构。
例一:
从3.1中例二中的json.txt中读取并转换成python数据结构

import json

f=open("json.txt","r")
data=f.read()				#类型是#<class 'str'>
data=json.loads(data)	 	#类型是<class 'dict'>
f.close()
print(type(data))
print(data)

输出:
<class ‘dict’>
{‘name’: ‘chuhe’, ‘age’: ‘20’}

3.3、dump

3.1中的dumps功能基本一致,唯一不样的地方是dump含有write的功能

import json

dic={"name":"chuhe","age":"20"}
f=open("json.txt","w")
json.dump(dic,f)

3.4、load

3.2中的loads功能基本一致,唯一不样的地方是
load带有read功能
data=f.read()

import json

f=open("json.txt","r")
data=json.load(f)
f.close()
print(type(data))
print(data)

输出:
<class ‘dict’>
{‘name’: ‘chuhe’, ‘age’: ‘20’}

4、格式化JSON

4.1、indent

  • indent是dumps的一个参数
  • indent 的作用相当于对json的格式进行了排序 ,并给他间隔
    例:
import json

dic={"name":"chuhe","age":"20"}
dic=json.dumps(dic,indent=4)
print(dic)

输出:
{
        “name”: “chuhe”,
         “age”: “20”
}

4.2、ensure_ascii

  • ensure_ascii是dumps的一个参数
  • 是否直接显示中文
  • ensure_ascii=True不显示中文,默认
  • ensure_ascii=False显示中文

转换成JSON字符串时,中文字符会被转义
例一:

import json

dic={"name":"锄禾","age":"20"}
dic=json.dumps(dic)			#默认ensure_ascii=True,即不显示中文
print(dic)

输出:
{“name”: “\u9504\u79be”, “age”: “20”}

例二:

import json

dic={"name":"锄禾","age":"20"}
dic=json.dumps(dic,ensure_ascii=False,indent=4)
print(dic)

输出:
{
        “name”: “锄禾”,
         “age”: “20”
}

4.3、sort_keys

  • sort_keys是dumps的一个参数
  • 先把字母的排序在返回json
  • sort_keys=False,不排序,默认
  • sort_keys=True,排序
    例:
import json

dic={"name":"chuhe","age":"20"}
dic=json.dumps(dic,indent=4,sort_keys=True)
print(dic)

输出:
{
        “age”: “20”
        “name”: “chuhe”
}

4.4、separators

  • separators是dumps的一个参数
  • JSON报文输出的格式
  • 第一个字符控制每个key-value与key-value间的分隔符
  • 第二个字符控制key和value间的分隔符
    例:
import json

dic={"name":"chuhe","age":"20"}
dic=json.dumps(dic,indent=4,separators=(",",";"))
print(dic)

输出:
{
         “name”;“chuhe”,
         “age”;“20”
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值