当前位置: 首页 > news >正文

json字符串与python字典的区别与联系

json字符串与python中自带的字典类型外表长的很像,很容易区分不清楚,它们之间有着本质的区别,可以通过内置的json模块来互相转换。

文章目录

  • 1、Python字典
  • 2、JSON数据格式
  • 3、JSON与python字典的区别
  • 4、JSON与python字典相互转换
    • 4.1 json字符串与python字典之间使用json.dumps()和json.loads()
    • 4.2 json文件对象与python字典之间使用json.dump()和json.load()


1、Python字典

Python字典的key可以是任何不可变类型,如数值、字符串、元组(不含可变对象)。可变类型如list、dict、set不能作为key。关键在于对象是否有__hash__方法,因为字典的key是通过__hash__方法进行区分的。
如下面代码对字典的赋值:

dic = {'a': 11, 'b': '22', 'c': [33, '44'], 55: 66, 77.0: 88, True: 99, None: 100, ('d', 'e'): ('f', 'g')}
print("dic type: ", type(dic))
print(dic)

输出结果如下:
在这里插入图片描述


2、JSON数据格式

JSON(JavaScript Object Notation)数据格式是一种轻量级的数据交换格式,它采用了一种类似于JavaScript语法的结构,可以方便地在不同平台和编程语言之间进行数据交换。在Python中,通过使用内置的json模块来读取和写入JSON文件。我们可以使用json.dumps()函数将Python对象序列化为JSON字符串,使用json.loads()函数将JSON字符串反序列化为Python对象。

它们之间的转换关系如下:
在这里插入图片描述


3、JSON与python字典的区别

  1. python dict 字符串用单引号,json强制规定使用双引号。如下:
    在这里插入图片描述
  2. json会将python字典的value中的元组强制变成列表,包括嵌套的元组也会变成列表。同时json会将python字典的key中的数值强制变成字符串。如下:
    在这里插入图片描述
  3. json的key必须是字符串,而且强制是双引号包裹,python字典的key只要是可hash即可,所以元组也可以作为python字典的key,list不可以,而元组不可以作为json的key。如下图所示:
    在这里插入图片描述
  4. json是true,false,null,而python字典是True,False,None
    在这里插入图片描述
  5. python字典中key和value都可以出现中文,但json的中文会被转换成Unicode编码
    在这里插入图片描述

4、JSON与python字典相互转换

4.1 json字符串与python字典之间使用json.dumps()和json.loads()

在这里插入图片描述
上图中python字典的key中,55,77.0,True和None在序列化成json字符串的过程中被强制转换成了str格式;在json字符串反序列化回python字典时,恢复不到原来的类型了,只能转换成字符串。

4.2 json文件对象与python字典之间使用json.dump()和json.load()

python字典保存到json文件有两种方法:
法一:使用文件对象的write方法写json字符串到json文件中;
法二:使用json.dump方法写python字典到文件对象中
在这里插入图片描述
json.load()用于从json文件中读取数据到python字典。
在这里插入图片描述

http://www.lryc.cn/news/478602.html

相关文章:

  • 数据结构-链表【chapter1】【c语言版】
  • OJ05:989. 数组形式的整数加法
  • 山东布谷科技:关于直播源码|语音源码|一对一直播源码提交App Store的流程及重构建议
  • docker搭建guacamole,web远程桌面
  • .baxia勒索病毒来袭:数据恢复与防护措施详解
  • [UUCTF 2022 新生赛]ezpop 详细题解(字符串逃逸)
  • 【Zynq UltraScale+ RFSoC】DFE
  • Ubuntu学习笔记 - Day3
  • scala list系列
  • TLS协议基本原理与Wireshark分析_wireshark分析tls协议
  • 【359】基于springboot的智慧草莓基地管理系统
  • 【智能算法应用】遗传算法求解车间布局优化问题
  • java 中List 的使用
  • CSS学习之Grid网格布局基本概念、容器属性
  • 前后端交互接口(二)
  • HarmonyOs DevEco Studio小技巧28--部分鸿蒙生命周期详解
  • STM32(hal库)的msp初始化HAL_TIM_Base_MspInit有什么用?为什么单独设置这个,而不是在timer_init()函数里直接初始化?
  • 三品PLM系统如何规范企业图纸文档资料电子化管理
  • 鸿蒙开发:arkts 如何读取json数据
  • Java学习篇之JVM 调优
  • LangChain上使用huggingface的embedding模型(如jina-embeddings-v3)
  • 对象优化及右值引用优化(一)
  • 江西省技能培训平台(逆向破解登录国密SM2)
  • 用万用表测量三极管:【判断是NPN\PNP+3极性】
  • StableDiffusion系列教程 | 什么是SD?SD能做什么?有哪些应用场景?
  • AutoCAD的Dwg版本代号、R版本参数值以及二次开发时VS、.NET版本关系
  • 解密可观测行业中的语义规范 — 代码世界中的“语言艺术”
  • esp32 ap httpsever 控制led
  • 告别复杂判断!Python中实现函数重载的终极技巧
  • Clang-Format:让你的代码整齐划一,格式不再烦恼