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

devtools/2024/11/9 0:24:25/

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__方法进行区分的。
如下面代码对字典的赋值:

python">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对象。

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


python_24">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编码
    在这里插入图片描述

python_37">4、JSON与python字典相互转换

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

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

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

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


http://www.ppmy.cn/devtools/132436.html

相关文章

【在Linux世界中追寻伟大的One Piece】多路转接select

目录 1 -> I/O多路转接之select 1.1 -> 初识select 1.2 -> select函数原型 1.3 -> 关于fd_set结构 1.4 -> 关于timeval结构 2 -> 理解select执行过程 2.1 -> Socket就绪条件 2.2 -> select特点 2.3 -> select缺点 3 -> select使用示例…

FPGA 实现CAN通信

使用FPGASJA 1000芯片实现CAN通信。核心思路是对集成CAN协议的芯片尽心配置,来进行CAN通信。核心顶层代码: //-- Company: //-- Engineer: //-- //-- Create Date: 11:18:25 12/01/2021 //-- Design Name: //-- Module Name: con_port - …

Unity性能优化 -- 性能分析工具

Stats窗口Profiler窗口Memory Profiler其他性能分析工具(Physica Debugger 窗口,Import Activity 窗口,Code Coverage 窗口,Profile Analyzer 窗口,IMGUI Debugger 窗口) Stats 统级数据窗口 game窗口 可…

用示例来看C2Rust工具的使用和功能介绍

C2Rust可以将C语言的源代码转换成Rust语言的源代码。下面是一个简单的C语言代码示例,以及使用c2Rust工具将其转换为Rust安全代码的过程。 C语言源代码示例 // example.c #include <stdio.h>int add(int a, int b)

leetcode203. Remove Linked List Elements

给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 Given the head of a linked list and an integer val, remove all the nodes of the linked list that has Node.val val, and return …

git原理与上传

言&#xff1a; git是一个软件&#xff0c;gitee/github是一个网站&#xff0c;这里有什么联系吗&#xff1f;我们身为一个程序员不可能不知道github&#xff0c;但是毕竟这是外国的网站&#xff0c;我们不翻墙的情况下&#xff0c;是无法访问的(或者就是太慢了&#xff0c;或…

Solana 代币 2022 — Transfer Hook

从零到英雄的 Solana 代币 2022 — Transfer Hook Token 2022 计划引入了几项令人兴奋的扩展&#xff0c;增强了铸造和代币账户的功能。在这些功能中&#xff0c;我个人最喜欢的是Transfer Hook &#xff08;转账钩子&#xff09; 。 想象时间 让我们戴上想象的帽子&#xf…

【系统架构设计师】高分论文:论软件的可用性设计

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 摘要正文摘要 2021年5月,我参加了某市人才集团信息化集中项目的建设。在该项目中,我担任系统架构师。该项目合同金额为 523.5 万元,建设工期为8个月,项目建设内容包含新建一个门户网站、新建4个子系统以及集成…