python内置模块【json】

python内置模块【json】,第1张

python内置模块【json】

json模块,是python内部的一个模块,可以将python的数据格式转换为json格式的数据,也可以将json格式的数据转换为python的数据格式

json格式,是一个数据格式(本质上就是字符串,常用于网络数据传输)

  • python中的数据格式

    data=[
        {'id':1,name:'wxy'},
        ('wxy1',123)
    ]
    
  • JSON格式

    data='[{"id":1,name:"wxy"},["wxy1",123]]'
    

    注意:

    • json中字符串要用""(双引号)
1.核心功能

json格式的作用

  • 跨语言数据传输

    语言不同,基础数据类型格式不同
    为了方便数据传输,约定格式:json格式
    

python数据类型与json格式的相互转换

  • python数据类型---->json【序列化】

    import json
    data=[
        {'id':1,'name':'小红'},
        ('wxy1',123)
    ]
    res=json.dumps(data)
    print(res)  #'[{"id": 1, "name": "\u5c0f\u7ea2"}, ["wxy1", 123]]'
    
    #ensure_ascii=False,显示中文
    res1=json.dumps(data,ensure_ascii=False)
    print(res1)#'[{"id": 1, "name": "小红"}, ["wxy1", 123]]'
    
  • json---->python数据类型【反序列化】

    import json
    data='[{"id":1,"name":"王晓宇"},["wxy1",123]]'
    res=json.loads(data)
    print(res)  #[{'id': 1, 'name': '王晓宇'}, ['wxy1', 123]]
    
2.类型要求

python的数据类型转换为json格式,对数据类型有要求,默认只支持:

 	+-------------------+---------------+
    | Python            | JSON          |
    +===================+===============+
    | dict              | object        |
    +-------------------+---------------+
    | list, tuple       | array         |
    +-------------------+---------------+
    | str               | string        |
    +-------------------+---------------+
    | int, float        | number        |
    +-------------------+---------------+
    | True              | true          |
    +-------------------+---------------+
    | False             | false         |
    +-------------------+---------------+
    | None              | null          |
    +-------------------+---------------+

其他类型想要支持,需要自定义JSONEncoder才能实现

import json
from decimal import Decimal
from datetime import datetime
data = [
    {"id": 1, "name": "小红", "age": 18, 'size': Decimal("18.99"), 'ctime': datetime.now()},
    {"id": 2, "name": "wxy", "age": 18, 'size': Decimal("9.99"), 'ctime': datetime.now()},
]
class MyJSONEncoder(json.JSONEncoder):
    def default(self, o):
        if type(o)==Decimal:
            return str(0)
        elif type(o)==datetime:
            return o.strftime('%Y-%m-%d')
        return super().default(o)
res=json.dumps(data,cls=MyJSONEncoder,ensure_ascii=False)
print(res)
#[{"id": 1, "name": "小红", "age": 18, "size": "0", "ctime": "2022-01-03"}, {"id": 2, "name": "wxy", "age": 18, "size": "0", "ctime": "2022-01-03"}]

3.其他功能
  • json.dumps,序列化生成一个json字符串

  • json.loads,反序列化生成python数据类型

  • json.dump,将数据序列化并写入文件【不常用】

    import json
    data=[
        {'id':1,'name':'小红'},
        ('wxy1',123)
    ]
    f=open('files/a.json',mode='w',encoding='utf-8')
    json.dump(data,f,ensure_ascii=False)
    f.close()
    
  • json.load,读取文件中的数据并反序列化为python的数据类型【不常用】

    import json
    f=open('files/a.json',mode='r',encoding='utf-8')
    res=json.load(f)
    f.close()
    print(res,type(res))
    #[{'id': 1, 'name': '小红'}, ['wxy1', 123]] 
    

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/790058.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-05
下一篇2022-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存