首页 > 编程语言 >json python

json python

时间:2022-10-12 19:22:29浏览次数:54  
标签:python dic dic1 json 字符串 序列化 字典

json python

阅读目录

回到顶部

序列化模块

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+'\n')
    str2 = json.dumps(dic2)
    f.write(str2+'\n')
    str3 = json.dumps(dic3)
    f.write(str3+'\n')
    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+'\n')
        f.write(dic1+'\n')
        f.write(dic1+'\n')
        f.write(dic1+'\n')
    with open('info', 'r')as f:
        for i in f:
            print(json.loads(i))
    
https://www.cnblogs.com/daviddd/p/12033707.html

标签:python,dic,dic1,json,字符串,序列化,字典
From: https://www.cnblogs.com/sunny3158/p/16785652.html

相关文章

  • mysql存储json
    mysql存储json  1.json_merge合并Json并返回 ?1update`user`setinviteeMap=json_merge(inviteeMap,'{"xx1":100}')    where`account`='100089'......
  • python 装饰器
    参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017451662295584https://blog.csdn.net/zhh763984017/article/details/120072425......
  • python第十三课---
    昨日内容回顾global与nonlocal关键字global 用于局部名称空间修改全局名称空间中的名字绑定关系nonlocal 用于局部名称空间修改外层局部名称空间中的名字绑定关系......
  • 如何格式化json字符串
    提问C#如何格式化json字符串回答privatestringConvertJsonString(stringstr){//格式化json字符串JsonSerializerserializer=......
  • python基础--简单数据类型预览
    为了适应更多的使用场景,将数据划分为多种类型,每种类型都有各自的特点和使用场景,帮助计算机高效的处理和展示数据。(比如数字用于数学运算、字符串用于信息传递、页面文字展......
  • Python 为什么能支持任意的真值判断?
    Python在涉及​​真值判断​​​(​​TruthValueTesting​​)时,语法很简便。比如,在判断某个对象是否不为None时,或者判断容器对象是否不为空时,并不需要显示地写出判断条件......
  • Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?
    花下猫语:在上一篇《​​Python为什么能支持任意的真值判断?​​》文章中,我们分析了Python在真值判断时的底层实现,可以看出Python在对待布尔值时,采用了比较宽泛的态度。......
  • Python 为什么会有个奇怪的“...”对象?
    在写上一篇《​​Python为什么要有pass语句?​​》时,我想到一种特别的写法,很多人会把它当成pass语句的替代。在文章发布后,果然有三条留言提及了它。所谓特别的写法就是......
  • Python 哈希函数
    1.hashlib模块实现了许多不同安全散列和消息摘要算法的通用接口。包括FIPS安全哈希算法SHA1,SHA224,SHA256,SHA384和SHA512以及RSA的MD5算法。如果您需要adler32或crc32哈......
  • Python定时任务框架APScheduler
    原文:https://blog.csdn.net/kobepaul123/article/details/123616575在日常工作中,如果想要简化工作流程实现办公自动化,那么几乎有大半的功能模块都需要使用定时任务,例如定......