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

本文详细介绍了JSON的基本概念、语法格式,以及Python中json模块的使用,包括json.dumps()、json.dump()、json.loads()和json.load()函数。通过示例展示了如何将Python数据转换为JSON格式,以及如何从JSON数据还原Python对象。此外,还提供了JSON字符串和文件的解析方法。
摘要由CSDN通过智能技术生成

活动地址: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时,数据类型会有变化,如下:

PythonJSON
dictobject
list,tuplearray
strstring
int,float,int-&,float-derived Enumsnumber
Truetrue
Falsefalse
Nonenull

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

JSONPython
objectdict
arraylist
stringstr
number(int)int
number(real)float
trueTrue
falseFalse
nullNone

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 <class 'dict'>
JSON:  {"name": "jack", "age": 18, "tel": ["666888", "12312341234"], "isOnly": true}
JSON <class 'str'>

从结果中可以看出,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文件完成!")

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

 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=(',',':'))

生成的文件显示:

 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}
<class 'dict'>

使用示例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}
<class 'dict'>

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}
<class 'dict'>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值