zoukankan      html  css  js  c++  java
  • 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数据类型

  • 相关阅读:
    软件开发基本原则(四)—— 风险管理 (转)
    软件开发基本原则(三)—— 基本原则 (转)
    人心散了,项目必然要败! (转)
    项目失败的若干征兆
    项目管理思考——角色转变
    软件开发基本原则(二)—— 典型错误 (转)
    项目管理思考——我适合做项目经理吗
    flex 学习篇 导航类容器
    mfc 中在 dc中 显示 位图
    第一次作业 黎娜 2013551605
  • 原文地址:https://www.cnblogs.com/GOD-L/p/13435057.html
Copyright © 2011-2022 走看看