• 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))
      
    希望你眼眸有星辰,心中有山海,从此以梦为马,不负韶华
  • 相关阅读:
    PHP Mail 简介
    二级叉的结算另一种方法
    PHP extract() 函数
    array_count_values函数
    对碰结算的方法
    array_walk() 函数
    函数引发二级叉的结算
    array_intersect() php筛选两个数组共有的元素
    php文件锁
    JAVA Math常用方法
  • 原文地址:https://www.cnblogs.com/daviddd/p/12033707.html
Copyright © 2020-2023  润新知