json

序列化模块

1,定义

  • 序列化:就是将一种数据结构(如字典,裂变)等转换成一个特殊的序列(字符串或者bytes)的过程就叫序列化
  • 序列化模块:就是讲一个常见的数据结构转化成一个特殊的序列,并且这个特殊的序列还可以反解回去,他的主要用途:文件读写数据,网络传输数据
  • 数据结构→字符串→bytes→→网路传输→→第二方→解码(decode)→原字符串→原数据额结构

json模块

  • 不同语言都遵循的一种数据化格式,即不同语言都使用的特殊字符串,完美的兼容性
  • json序列化只支持部分Python数据结构:dict,list,tuple,str,int,float,True,False,Nome。
  • json模块是将满足条件的数据结果转化成特殊的字符串,并且也可以反序列化还原回去
  • json是各种语言通用的
  • json模块的两对四个方法

1,用于网路传输

  • dumps,loads

    • 将字典类型转换成字符串类型

    • import jsom
      dic = {'k1':v1,'k2':v2,'k3',v3}
      str_dic = json.dumps(dic)   #序列化,讲一个字典转换成一个特殊字符串
      print(type(str_dic),str.dic) #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
      注意,json转换完成的字符串类型的字典中的字符串是“”双引号
      
    • 将字符串类型的字典转换成字典类型

    • import json
      dic1 = json.loads(str_dic)  #反序列化:将一个字符串类型的字典转换成一个字典
      print(type(dic1,dic1))		#<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
      注意,要用loads功能处理的字符串类型中的字典必须由“”双引号表示
      
    • 两者公用传输与还原(列表为例)

    • list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]
      str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型 
      print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
      list_dic2 = json.loads(str_dic)
      print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]
      

2,用于文件写读

  • dump,load

    • 将对象转换成字符串写进文件中

    • dump方法接受一个文件句柄,直接将字典转换成json字符串写入文件中

    • json文件也是文件,是专门储存json字符串的文件

    • import json
      with open('json_file','w')
      dic = dic = {'k1':v1,'k2':v2,'k3',v3}
      json.dump(dic,f)
      
    • 将文件中的字符串类型的字典转换成字典

    • load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回

    • import json
      wirh open('json_file')
      dic1 = json.load(f)
      print(dic1,type(dic1))
      

3,其他参数

  • ensuer_ascii
    • 当它为True的时候,所有非ASCII码字符显示为uXXXX序列
    • 在dump时,将ensure__ascii设置为False即可,此时存入json中的中文就可以正常显示
  • separators
    • 分隔符
  • sort_keys
    • 将数据根据keys的值进行排序。

4,json序列化储存多个数据到同一个文件中

  • 对于json序列化,储存多个数据到一个文件中是有问题的,默认一个json文件只能储存一个json数据,但是也可以解决举例说明

  • 对于json 存储多个数据到文件中
    dic1 = {'name':'oldboy1'}
    dic2 = {'name':'oldboy2'}
    dic3 = {'name':'oldboy3'}
    f = open('序列化',,mode='a',encoding='utf-8')
    json.dump(dic1,f)
    json.dump(dic2,f)
    json.dump(dic3,f)
    f.close()
    
    f = open('序列化',‘r')
    ret = json.load(f)
    ret1 = json.load(f)
    ret2 = json.load(f)
    print(ret)
    
  • 上边的代码会报错,下边是解决方法

  • dic1 = {'name':'oldboy1'}
    dic2 = {'name':'oldboy2'}
    dic3 = {'name':'oldboy3'}
    f = open('序列化','a')
    str1 = json.dumps(dic1)
    f.write(str1+'
    ')
    str2 = json.dumps(dic2)
    f.write(str2+'
    ')
    str3 = json.dumps(dic3)
    f.write(str3+'
    ')
    f.close()
    ​
    f = open('序列化','r')
    for line in f:
        print(json.loads(line))
    
  • import json
    dic = {1:2,2:3,3:4,4:5}
    with open('info','w')as f:
        dic1 = json.dumps(dic)
        f.write(dic1+'
    ')
        f.write(dic1+'
    ')
        f.write(dic1+'
    ')
        f.write(dic1+'
    ')
    with open('info', 'r')as f:
        for i in f:
            print(json.loads(i))
    
希望你眼眸有星辰,心中有山海,从此以梦为马,不负韶华
原文地址:https://www.cnblogs.com/daviddd/p/12033707.html