zoukankan      html  css  js  c++  java
  • 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'}
  • 相关阅读:
    在Windows Server 2008 R2下搭建jsp环境(四)-在测试的过程中可能出现的问题
    在Windows Server 2008 R2下搭建jsp环境(一)-JDK的下载安装
    在Windows Server 2008 R2下搭建jsp环境(二)-mysql的下载安装
    如何去掉word中的回车符??
    打开office时提示错误窗口“向程序发送命令时出现问题”的解决方案
    在Windows Server 2008 R2下搭建jsp环境
    咱们一起来搭建一个FTP服务器
    如何将项目部署到Github
    电脑开机失败提示"用户配置文件服务登录失败"的三种解决办法
    个人作业2
  • 原文地址:https://www.cnblogs.com/pinpin/p/10627882.html
Copyright © 2011-2022 走看看