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'}
  • 相关阅读:
    const用法详解(转)
    [转]Scintilla开源库使用指南
    javascript 流程控制语句 if 语句
    knockout.js 练习一
    深入Node.js的模块机制
    js本地存储解决方案(localStorage与userData)
    linear-gradient 渐变 css3新属性
    制作响应式网站时,用来测试不同宽度下网页展示效果的方法
    zepto.js, django和webpy
    attachEvent 与 addEventListener 的用法、区别
  • 原文地址:https://www.cnblogs.com/pinpin/p/10627882.html
Copyright © 2011-2022 走看看