【python】JSON标准库文件介绍及python中json模块使用

活动地址:CSDN21天学习挑战赛

目录

1.  JSON简介

2. JSON语法格式

3. python中的json模块

3.1 python数据类型与json数据类型转换

3.2 json模块常用函数

3.2.1 json.dumps()函数  python  ->  json

 3.2.2 json.dump()函数 python  ->  json 并保存到文件中

3.2.3 json.loads()  json -> python

3.2.4 json.load()  读取json文件并转换为python

3.3 解析JSON字串或文件


**

学习日记 Day2

**

1.  JSON简介

JSON,Java Script Object Notation,是一种轻量级的文本数据交换格式,JSON独立于语言,具有自我描述性,更易理解;JSON比XML更小、更快、更易解析;爬虫经常获取的接口数据就是JSON格式。

JSON数据格式类似python的字典格式,里面包括方括号括起来的数组,类似python里的列表。

2. JSON语法格式

语法格式:{key1:value1, key2:value2},如果value表示的数据有很多,用方括号括起来[],称为数组。

JSON是键值对形式构成的,键的部分必须用双引号包裹 "",值的部分,不允许出现函数function,undefined,NaN,但可以有null,不允许出现没有意义的逗号。

如下:

格式1:JSON 对象

{
    "name" : "Jack",
    "age" : 18
}

格式2:JSON数组

{
    "student":
    [
        {"name" : "Jack", "age" : 18},
        {"name" : "Lucy", "age" : 18}
    ],
    "classroom" : {
        "class1" : "room1",
        "class2" : "room2"
    }
}

3. python中的json模块

python提供了json模块,作用是使用JSON字符串生成python对象(load),或由python对象格式化成json字符串(dump)。

使用时需要导入模块:import json

3.1 python数据类型与json数据类型转换

python -> json时,数据类型会有变化,如下:

Python JSON
dict object
list,tuple array
str string
int,float,int-&,float-derived Enums number
True true
False false
None null

json -> python,转换时数据类型变化如下:

JSON Python
object dict
array list
string str
number(int) int
number(real) float
true True
false False
null None

3.2 json模块常用函数

方法 功能
json.dumps(obj) 将python数据类型转换为json格式的字符串
json.dump(obj,fp) 将python数据类型转换并保存到json格式的文件内
json.loads(s) 将json格式的字符串转换为python的类型
json.load(fp) 从json格式的文件中读取数据并转换为python的类型

3.2.1 json.dumps()函数  python  ->  json

json.dumps()函数将python数据类型转换为json格式的字符串。

json.dumps(obj,*,
    skipkeys=False,  # 是否允许JSON字串编码字典对象时,字典的key不是字符串类型(默认不允许)
    ensure_ascii=True,
    check_circular=True,
    allow_nan=True,
    cls=None,
    indent=None,  # 定义缩进
    separators=None,  # 是一个元组,定义分隔符的类型
    default=None,
    sort_keys=False,  # 是否排序
    **kw)

使用示例1:将python字典转换为json字符串

import json

# python 字典
p_persopn = {"name":"jack",
             "age":18 ,
             "tel":["666888",'12312341234'],
             "isOnly":True
             }
print("python: ",p_persopn)

# 转换为json字符串
j_person = json.dumps(p_persopn)
print("JSON: ",j_person)

显示结果:

python:  {'name': 'jack', 'age': 18, 'tel': ['666888', '12312341234'], 'isOnly': True}
python
JSON:  {"name": "jack", "age": 18, "tel": ["666888", "12312341234"], "isOnly": true}
JSON

从结果中可以看出,python打印的是单引号,数据类型是字典,True首字母大写;json打印的是双引号,数据类型是字符串,true全部小写。

使用示例2:格式化输出json字串:

import json

# python 字典
p_persopn = {"name":"jack",
             "age":18 ,
             "tel":["666888",'12312341234'],
             "isOnly":True
             }
print("python: ",p_persopn)

# 格式化输出json字串
j_person = json.dumps(p_persopn,sort_keys=True,indent=4,separators=(',',':'))
print("格式化输出JSON:",j_person)

j_person = json.dumps(p_persopn,sort_keys=True,indent=4,separators=('!','='))
print("格式化输出JSON:",j_person)

显示结果:

python:  {'name': 'jack', 'age': 18, 'tel': ['666888', '12312341234'], 'isOnly': True}
格式化输出JSON: {
    "age":18,
    "isOnly":true,
    "name":"jack",
    "tel":[
        "666888",
        "12312341234"
    ]
}
格式化输出JSON: {
    "age"=18!
    "isOnly"=true!
    "name"="jack"!
    "tel"=[
        "666888"!
        "12312341234"
    ]
}

可以看出定义的separators元组的第一个元素是json中每个键值对之间的分隔符,元组的第二个元素是json中键值对之间的分隔符。

使用示例3:将python字串转换为json字串后存入文件

import json

# 保存json文件
p_persopn = {"name":"jack",
             "age":18 ,
             "tel":["666888",'12312341234'],
             "isOnly":True
             }
print("python: ",p_persopn)

j_person = json.dumps(p_persopn)
with open('test.json','w',encoding='utf-8') as f:  # 打开文件
    f.write(j_person)  # 写入文件
    print("保存json文件完成!")

j_person = json.dumps(p_persopn,sort_keys=True,indent=4,separators=(',',':'))
with open('test_format.json','w',encoding='utf-8') as f:  # 打开文件
    f.write(j_person)  # 写入文件
    print("保存json文件完成!")

显示结果,新生成的文件:

【python】JSON标准库文件介绍及python中json模块使用_第1张图片

 3.2.2 json.dump()函数 python  ->  json 并保存到文件中

json.dump()函数:

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
    )

使用示例1:python格式转换为json格式并保存到文件中

import json

# python -> json 并保存文件
p_persopn = {"name":"jack",
             "age":18 ,
             "tel":["666888",'12312341234'],
             "isOnly":True
             }
json.dump(p_persopn,open("data.json","w"))
# 格式化保存python转换的json
json.dump(p_persopn,open("data_format.json","w"),sort_keys=True,indent=4,separators=(',',':'))

生成的文件显示:

【python】JSON标准库文件介绍及python中json模块使用_第2张图片

 json.dumps()和json.dump()比较:

  • dump()不需要使用.write()方法,只需要传入字典,要写的文件即可;dumps()函数需要使用.write()方法写入数据;
  • 如果把字典写入到文件里,推荐使用dump(),但是如果不需要操作文件,或者需要把内容存储到数据库和excel,则需要使用dumps()先把字典转换成字符串,再写入。

3.2.3 json.loads()  json -> python

语法格式:

json.loads(s,*,
    cls=None,
    object_hook=None,
    parse_float=None,
    parse_int=None,
    parse_constant=None,
    object_pairs_hook=None,
    **kw
    )

使用示例1:json转换为python

# 将json转换为python
p_persopn = {"name":"jack",
             "age":18 ,
             "tel":["666888",'12312341234'],
             "isOnly":True
             }
j_person = json.dumps(p_persopn)
# json 转换为 python
new_python = json.loads(j_person)
print("json -> python:",new_python)
print(type(new_python))

显示结果:

json -> python: {'name': 'jack', 'age': 18, 'tel': ['666888', '12312341234'], 'isOnly': True}

使用示例2:读取json文件并转换成python

f = open("data.json",encoding='utf-8')
content = f.read()
python_obj = json.loads(content)
print(python_obj)
print(type(python_obj))

显示结果:

{'name': 'jack', 'age': 18, 'tel': ['666888', '12312341234'], 'isOnly': True}

3.2.4 json.load()  读取json文件并转换为python

json.load()从json格式的文件中读取数据并转换为python的类型。

语法格式:

json.load(fp,*,
    cls=None,
    object_hook==None,
    parse_float==None,
    parse_int=None,
    parse_constant=None,
    object_hook=None,
    **kw
)

使用示例1:使用函数json.load()从文件中读取数据并转换为python的类型

import json
# 使用json.load()从json格式的文件中读取数据并转换为python的类型
python_obj = json.load(open('data.json','r'))
print('json.load(): ',python_obj)
print(type(python_obj))

显示结果:

json.load():  {'name': 'jack', 'age': 18, 'tel': ['666888', '12312341234'], 'isOnly': True}

json.load()和json.loads()区别:

  • loads()参数是json字符串,load()参数是文件对象;
  • 使用loads()时需要先读取文件再使用,而load()则不用;

3.3 解析JSON字串或文件

分析:不管是JSON字串还是文件,都需要先把JSON格式的内容转换为python对象,然后逐层输出python对象(如果转换后的python对象是多层的话)。

示例代码1:解析 json 字串

import json


json_str = '{"name":"test","type":{"name":"seq","parameter":["1","2"]}}'
print(json_str)
print(type(json_str))
print("="*70)

# 1. json文件转换为python对象
p_obj = json.loads(json_str)
print(p_obj)
print(type(p_obj))
print("="*70)

# 2. 查询具体的数据节点
print(p_obj.keys())
print(p_obj.values())
print("="*60)
print("输出解析后的json文件")
print("name : ",p_obj["name"])
print("type : ",p_obj["type"])
print("type-name : ",p_obj["type"]["name"])
print("type-parameter : ",p_obj["type"]["parameter"])
print("type-parameter[0]",p_obj["type"]["parameter"][0])
print("type-parameter[1]",p_obj["type"]["parameter"][1])

# 或者递归实现JSON文件解析,如下仅解析输出的字典类型
def parase_dict(dct):
    '''
    解析输出json转换后的python字典数据
    '''
    keys = dct.keys()
    vals = dct.values()

    for key in keys:
        if isinstance(dct[key],dict):
            print(key+" = ", dct[key])
            parase_dict(dct[key])

        else:
            print(key+" = ",dct[key])
        

显示结果:

dict_keys(['name', 'type'])
dict_values(['test', {'name': 'seq', 'parameter': ['1', '2']}])
============================================================
输出解析后的json文件
name :  test
type :  {'name': 'seq', 'parameter': ['1', '2']}
type-name :  seq
type-parameter :  ['1', '2']
type-parameter[0] 1
type-parameter[1] 2

示例代码2:解析JSON文件

import json


def parase_dict(dct):
    '''
    解析输出json转换后的python字典数据
    '''
    keys = dct.keys()
    vals = dct.values()

    for key in keys:
        if isinstance(dct[key],dict):
            print(key+" = ", dct[key])
            parase_dict(dct[key])

        else:
            print(key+" = ",dct[key])
        

# 解析JSON文件
print("="*60)
p_obj = json.load(open("test.json","r"))
print(p_obj)
parase_dict(p_obj)

显示结果:

============================================================
{'name': 'jack', 'age': 18, 'tel': ['666888', '12312341234'], 'isOnly': True}        
name =  jack
age =  18
tel =  ['666888', '12312341234']
isOnly =  True

你可能感兴趣的:(json,python)