• Json模块


    json全称JavaScript Object Notation,是一种java脚本兑现标记语言,已经成为一种简单的数据交换格式,通常用于序列化反序列化工作。

    一、json的dumps方法与loads方法

      作用:主要操作内存中的数据

      1.json.dumps(数据):将数据转换成json字符串

      2.json.loads(json字符串):将json字符串转换为原来的数据

    二、json的dump方法与load方法

      作用:常组合使用于文件操作中

      打开某一文件后-->1.json.dump(数据, 文件) 将数据先转换成json字符串再写入文件

               2.json.load(文件) 将文件中的json字符串读取出来并转换为原来的数据

      缺点:json操作文件通常是一次性写,一次性读。即在你打开某一文件到文件关闭之前,你只能写入一次或者读取一次

    三、序列化:serialization

      将内存中的数据,转换成字节串 ,用以保存在文件或通过网络传输

    import json
    
    
    # json.dumps() 把指定的对象转换成json格式的字符串并返回
    s = json.dumps([1, 2, 3])
    print(s, type(s))  # '[1, 2, 3]'
    
    s1 = json.dumps((1, 2, 3)) # 元组序列化后,其形式会变成列表
    print(s1, type(s1))
    
    s2 = json.dumps(10)
    print(s2, type(s2))
    
    s3 = json.dumps({'name':'David', 'age':20})
    print(s3, type(s3))
    
    # 可以将某一数据对象写到文件中
    # with open('b.txt', encoding='utf-8', mode='a') as f:
    #     json.dump([1, 2, 3, 4], f)

    四、反序列化:deserialization

      从文件、网络中获取的数据,替换为内存中原来的数据类型

    import json
    
    
    res = json.dumps(100) # 把100变为json字符串
    num = json.loads(res) # 原来数据类型
    print(num, type(num))
    
    # 从文件中反序列化
    with open('b.txt', encoding='utf-8') as f:
        res = json.load(f)
        print(type(res))
        print(res)

    五、如何解决dump方法与load方法在文件操作中的缺点

      思路:把需要序列化的数据对象,通过多次序列化的方式(可以理解为将对象拆分成多个小块),再用文件操作的write方法,将多次序列化之后的json字符串依次全部写入文件

    1.多次序列化后写入文件

    with open('json.txt', encoding='utf-8', mode='a') as f:
         f.write(json.dumps([1, 2]) + '
    ')
         f.write(json.dumps([3 ,4, 5]) + '
    ')

    2.把分次序列化的json字符串,从文件中反序列化回来

    with open('json.txt', encoding='utf-8', mode='rt') as f:
        for line in f:
            print(json.loads(line.strip()))

    六、补充一些小知识点

    l1 = [i for i in range(5)]
    
    # l1 --> bytes
    # b1 = l1.encode('utf-8')  # 不能直接转换
    
    # 只有字符串才能和bytes相互转换
    # 先转换成字符串再转换成bytes
    b1 = str(l1).encode('utf-8')
    print(b1, type(b1))
    
    # 假如接收方接收到了 b1
    # 需要先以相应的编码格式对b1进行解码
    s2 = b1.decode('utf-8')
    print(s2, type(s2))
    
    
    
    dic = {'name':'lgq', 'age':22, 'stats':True}
    
    import json
    # 将dic转换成特殊的字符串
    s3 = json.dumps(dic, ensure_ascii=False)
    print(s3, type(s3))
    # 再转换回去
    dic1 = json.loads(s3)
    print(dic1, type(dic1))

    七、小结

    json主要用于序列化和反序列化

    缺点:不安全;不适用于set数据类型

  • 相关阅读:
    洛谷P2878 [USACO07JAN]保护花朵Protecting the Flowers
    洛谷P2434 [SDOI2005]区间
    洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn
    洛谷 P2904 [USACO08MAR]跨河River Crossing
    Again Stone Game
    Crazy Calendar (阶梯博弈变形)
    (2017浙江省赛E)Seven Segment Display
    ZOJ 3705 Applications
    D
    The Suspects(并查集维护根节点信息)
  • 原文地址:https://www.cnblogs.com/GOD-L/p/13435057.html
Copyright © 2020-2023  润新知