• Python常用模块之json模块


    常用模块:
    一个Python文件就是一个模块
    import xxx
    1. 标准模块,Python自带的,如time/random
    2. 第三方模块,如连接mysql,需要安装
    3. 自己写的Python文件
    校验json格式是否正确:www.bejson.com  

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,其最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式。json类似于xml,但比 XML 更小、更快,更易解析。

    一、json字符串转为字典

    json.load / json.loads

    两个方法功能类似,可选参数也相同,最大的区别在于,json.load方法接受的输入,即第一个参数,是包含json数据的文件对象,如open方法的返回对象,

    json.loads接受的输入是json字符串,而非文件对象。从输入类型的区别也可以看出两者的使用场合。

    查看源码:
    def 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):
        # Serialize ``obj`` to a JSON formatted ``str``.
        # 序列号 “obj” 数据类型 转换为 JSON格式的字符串 
    def 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):
        """Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
        ``.write()``-supporting file-like object).
         我理解为两个动作,一个动作是将”obj“转换为JSON格式的字符串,还有一个动作是将字符串写入到文件中,也就是说文件描述符fp是必须要的参数 """

    1. json.loads : 将json编码的字符串转换为python的数据结构

    import json
    json_str = ''' {"name":"xiaohei","age":18,"sex":"男","age":18} ''' res = json.loads(json_str) #把字符串(json串)转成字典 print(res) print(type(json_str)) print(type(res)) #以上输出如下: # {'name': 'xiaohei', 'age': 18, 'sex': '男'} # <class 'str'> # <class 'dict'>

    2. json.load : 从数据文件中读取数据,并将json编码的字符串转换为python的数据结构,load可以自己读文件

    import json
    with open('text.json','r',encoding='utf-8') as fr:
        aa = json.loads(fr.read())
        fr.seek(0)
        bb = json.load(fr)# json.load(fr)和json.loads(fr.read()) 返回结果一样,load可以自己去读文件
        print(aa)
        print(bb)
    
    #输出
    # {'name': '小黑', 'age': 18, 'sex': '男'}
    # {'name': '小黑', 'age': 18, 'sex': '男'}

    二、字典转换为json

    json.dump / json.dumps

    对应于load和loads,dump的第一个参数是对象字典,第二个参数是文件对象,可以直接将转换后的json数据写入文件,dumps的第一个参数是对象字典,其余都是可选参数。dump和dumps的可选参数相同,这些参数都相当实用,现将用到的参数记录如下:

    ensure_ascii 默认为True,保证转换后的json字符串中全部是ascii字符,非ascii字符都会被转义。如果数据中存在中文或其他非ascii字符,最好将ensure_ascii设置为False,保证输出结果正常

    indent 缩进,默认为None,没有缩进,设置为正整数时,输出的格式将按照indent指定的半角空格数缩进,相当实用。

    separators 设置分隔符,默认的分隔符是(',', ': '),如果需要自定义json中的分隔符,例如调整冒号前后的空格数,可以按照(item_separator, key_separator)的形式设置。

    sort_keys 默认为False,设为True时,输出结果将按照字典中的key排序。

    查看源码:

    def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
        """Deserialize ``s`` (a ``str`` instance containing a JSON document) to a Python object.
           将包含str类型的JSON文档反序列化为一个python对象"""
    def load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
        """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing a JSON document) to a Python object.
            将一个包含JSON格式数据的可读文件饭序列化为一个python对象"""

     1. json.dumps: 将数据通过特殊的形式转换为所有程序语言都认识的字符串

    import json
    dic = {
        "xiaohei":{
            "age":18,
            "password":12345,
            "sex":"",
            "addr":"北京"
        },
        "马春波":{
            "age":18,
            "password":12345,
            "sex":"",
            "addr":"北京"
        },
        "王东泽":{
            "age":18,
            "password":12345,
            "sex":"",
            "addr":"北京"
        },
    }
    res = json.dumps(dic,ensure_ascii=False,indent=4)#把字典变成字符串
    print(res)
    f = open('user.json','w',encoding='utf-8')
    f.write(res) #写入文件
    
    #输出:
    {
        "xiaohei": {
            "age": 18,
            "password": 12345,
            "sex": "",
            "addr": "北京"
        },
        "马春波": {
            "age": 18,
            "password": 12345,
            "sex": "",
            "addr": "北京"
        },
        "王东泽": {
            "age": 18,
            "password": 12345,
            "sex": "",
            "addr": "北京"
        }
    }

    2. json.dump:将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件

    import json
    
    dic = {
        "xiaohei":{
            "age":18,
            "password":12345,
            "sex":"",
            "addr":"北京"
        },
        "小白":{
            "age":18,
            "password":12345,
            "sex":"",
            "addr":"北京"
        },
        "小王":{
            "age":18,
            "password":12345,
            "sex":"",
            "addr":"北京"
        },
    }
    
    fw = open('newuser.json','w',encoding='utf-8')#打开一个新的文件
    aa = json.dump(dic,fw,indent=4,ensure_ascii=False)#将字典写到该文件中
    print(aa)

    三、 总结

    1. json序列化方法:

              dumps:无文件操作            dump:序列化+写入文件

      2. json反序列化方法:

              loads:无文件操作              load: 读文件+反序列化

    3.

    python 原始类型向 json 类型的转化对照表:

    PythonJSON
    dict object
    list, tuple array
    str, unicode string
    int, long, float number
    True true
    False false
    None null

    4. json 类型转换到 python 的类型对照表:

    JSONPython
    object dict
    array list
    string unicode
    number (int) int, long
    number (real) float
    true True
    false False
    null None
  • 相关阅读:
    viewController 不响应横竖屏转换相关消息的问题
    nsset排序
    内存相关
    技巧
    IOSTip
    iphone 资源
    IPhone 开发经验教训总结 仅供参考 (转载)
    WIN7控制面板假死
    Firefox添加web浏览端口:此地址使用了一个通常应该用于其他网页浏览的端口
    【WordPress】WXR version error when import into wordpress
  • 原文地址:https://www.cnblogs.com/denise1108/p/10061243.html
Copyright © 2020-2023  润新知