python——json模块

JSON(JavaScript Object Notation) 是一种轻量级的通用数据交换格式,起源于JavaScript,现在其他语言都能读写,可跨平台,用于数据存储,易于阅读,形式类似python的字典。

json模块和pickle模块包括的方法相同,功能类似。json和pickle主要不同在于:json是序列化的通用格式,其他编程语言都可以读写,人类可读,但是pickle对象仅限于python使用,因为其序列化结果是乱码,不可读。

注意:json内的规定字符集是UTF-8,存储的字符串和键必须使用""双引号。

python数据类型和json类型转化对照如下表:

Pythonjson
dictobject
list,tuplearray
strstring
int,long,floatnumber
True,False,Nonetrue,false,null
常用函数

常用函数包括如下四个,其中,dump和load表示和文件进行数据交互;dumps和loads表示和程序中的变量进行数据交互。

序列化(编码)
json.dump(object, file)
json.dumps(object) -> string

dump和dump其他输入参数相似,如下:
skipkeys:默认为False。若为True,则将跳过不是基本类型(str,int,float,bool,None)的dict键。
ensure_ascii:默认为True,将所有传入的非ASCII字符转义输出,否则以原字符输出。
check_circular:默认为True。若为False,则将跳过对容器类型的循环引用检查。
allow_nan:默认为True。若为False,序列化超出范围的浮点值(nan,inf,-inf)会引发ValueError。若为True,则将使用它们的JavaScript等效项(NaN,Infinity,-Infinity)。
indent:设置缩进格式,默认为None。若intent≤0或为“”,则插入换行符;indent>0缩进多个空格;indent是字符串,则该字符串用于缩进。
separators: 默认为None,表示默认分隔符:(’,’,’:’)。输入类型是tuple,比如(‘, ’,‘:’)
sort_keys:默认为False,若为True则字典的输出将按键值排序。

反序列化(解码)
json.load(file) -> object
json.loads(string) -> object
示例
dump
import json
a={'aa':123,'bb':456,'cc':789} 
#创建d.json文件,将a写入
with open('/root/python workspace/d.json', 'w') as f: 
    json.dump(a, f)
dumps
import json
a={'你好':1,'ss':"abc",'//':5}
f=json.dumps(a)#写入对象不是文件,而是python变量f
f
#输出:'{"\\u4f60\\u597d": 1, "ss": "abc", "//": 5}' 汉字变成了乱码
f=json.dumps(a,ensure_ascii=False,indent=4)#使用原字符,添加缩进
print(f)
"""
{
    "你好": 1,
    "ss": "abc",
    "//": 5
}
"""
#善用indent可以使输出的json看起来更整齐

注意:dumps返回的是字符串类型,虽然使用print后,看起来像字典。

load
import json
#读取事先建立的d.json文件
with open('/root/python workspace/d.json', 'r') as f:
    s=json.load(f) 
print(s)
#输出:{'aa': 123, 'bb': 456, 'cc': 789}

**注意:*读取对象文件可以不是.json后缀,但是内部存储的数据格式一定是按照json格式编写的,以键值对的方式,最外层有{},引号是双引号。

loads
import json
json.loads(f)
#输出为上文中的a:{'你好': 1, 'ss': 'abc', '//': 5}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值