python模块之json

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。JSON的数据格式其实就是python的字典格式,包含方括号括起来的数组,也就是python里面的列表。官网:https://docs.python.org/3/library/json.html

在python中,有专门处理json格式的模块—— json 和 picle模块

json模块和picle模块都有 dumps、dump、loads、load四种方法,而且用法一样,当然还有其他方法,两者不同的是:

json模块序列化出来的是通用格式,其它编程语言都认识,就是普通的字符串,

picle模块序列化出来的只有python可以认识,其他编程语言不认识的,表现为乱码

不过picle可以序列化函数,但是其他文件想用该函数,在该文件中需要有该文件的定义(定义和参数必须相同,内容可以不同)

这里我主要对json介绍

JSON转换为python对象

JSON

Python

object

dict

array

list

string

unicode

number (int)

int, long

number (real)

float

true

True

false

False

null

None

python对象转换为JSON

Python

JSON

dict

object

list, tuple

array

str, unicode

string

int, long, float

number

True

true

False

false

None

null

一、 dumps 和 dump:

dumps和dump序列化方法

dumps:序列化为str,

dump:必须传文件,将序列化的str保存到文件中

dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw):
# 序列号 “obj” 数据类型 转换为 JSON格式的字符串

dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw):
""" 有两个动作,一个动作是将”obj“转换为JSON格式的字符串,一个动作是将字符串写入到文件中,也就是说文件描述符fp是必须要的参数 """

示例代码:

import json

print(json.dumps([]))
print(json.dumps(1))
print(json.dumps("1"))
dict1 = {1:"one",2:"two",3:"three"}
print(json.dumps(dict1))

with open("test.json","w",encoding="utf-8") as f:
    f.write("this is dumps
")
    f.write(json.dumps(dict1,indent=4)) #1使用dumps
    f.write("
")
    f.write("this is dump
")
json.dump(dict1,f,indent=4)  #2使用dump,与1效果一致
#格式化:indent=4

执行效果

[]
1
"1"
{"1": "one", "2": "two", "3": "three"} 

文件内容:

this is dumps
{
    "1": "one",
    "2": "two",
    "3": "three"
}
this is dump
{
    "1": "one",
    "2": "two",
    "3": "three"
}

二、 loads 和 load

loads和load 反序列化方法

loads:反序列化,

load :只接收文件描述符,完成了读取文件和反序列化

loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
""" 将包含str类型的JSON文档反序列化为一个python对象"""

load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
"""将一个包含JSON格式数据的可读文件饭序列化为一个python对象"""

代码示例:

import json

json_l = json.loads('{"1": "one", "2": "two", "3": "three"}')
print(type(json_l),json_l)

json_2 ={"1": "one", "2": "two", "3": "three"}
with open("test.json","w",encoding="utf-8") as f:
    f.write(json.dumps(json_2,indent=4)) #1使用dumps

with open("test.json","r",encoding="utf-8") as f:
    aa= json.loads(f.read())  # 与 json.loads(f.read())
    f.seek(0) #将光标移动到起始位置
    bb = json.load(f)
print(type(aa),aa)
print(type(bb),bb)执行结果:

执行结果:

<class 'dict'> {'1': 'one', '2': 'two', '3': 'three'}

<class 'dict'> {'1': 'one', '2': 'two', '3': 'three'}

<class 'dict'> {'1': 'one', '2': 'two', '3': 'three'}

三、encoder 和decoder模块:

decoder和encoder编码器和解码器

json.JSONDecoder([encoding[, object_hook[, parse_float[, parse_int[, parse_constant[, strict[, object_pairs_hook]]]]]]])

json.JSONEncoder([skipkeys[, ensure_ascii[, check_circular[, allow_nan[, sort_keys[, indent[, separators[, encoding[, default]]]]]]]]])

代码示例:

import json
data = [{ 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 }]

json = json.JSONEncoder().encode(data)
print (type(json),json)

执行结果:

<class 'str'> [{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}]

代码示例:

import json

data1 = {1:"one",2:"two",3:"three"}
json_string=json.dumps(data1)

with open("test1.json","w",encoding="utf-8") as f:  #将json_string写入到文件中
    f.write(json.dumps(json_string,indent=4))

with open("test1.json","r",encoding="utf-8") as f2: #读取json文件
    f2.seek(0)
    aa= json.loads(f2.read())

json2 = json.JSONDecoder().decode(aa) #json
print (type(json2),json2)

执行结果:

<class 'dict'> {'1': 'one', '2': 'two', '3': 'three'}
原文地址:https://www.cnblogs.com/pinpin/p/10627882.html