百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Python如何读写json数据(python读取json数据的key值)

liuian 2025-04-11 00:58 71 浏览

先介绍一下什么是json,还是先看一下百度百科怎么说。

JSON(JavaScript Object Notation,JavaScript对象表示法)是基于ECMAScript的一个子集设计的,是一种开放标准的文件格式和数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。JSON独立于语言设计,很多编程语言都支持JSON格式的数据交换。

按照上面百科词条的说法,json和用什么语言没有什么关系,他就是一种数据交换格式。

JSON 的数据结构

JSON 由两种数据结构组成:对象数组

对象(object)是由键值对组成的无序集合,键是字符串,值可以是任何类型,包括对象和数组。对象由一对花括号{ }包围,键和值之间用冒号:分隔。键值对之间用逗号,分隔。

数组(array)是值(value)的有序集合,每个值可以是任何类型,包括对象和数组。数组由一对方括号[ ]包裹,值之间用逗号,分隔。

值(value)可以是花括号{ }括起来的字符串(String)、数值(Number)、布尔值(true/false)、 null、对象(Object)或者数组(Array),这些结构可以嵌套。

# 对象结构
{
    "name": "John",
    "age": 30,
    "isStudent": false
}
# 数组结构
[ "apple",  "banana",  "orange"]

看似和python中的字典差不多,但是你要知道他们是不一样的,数据类型都不同。

JSON 的优点和缺点

优点

  1. 与 JavaScript 完美兼容:JSON 格式源自 JavaScript,因此它与 JavaScript 非常兼容,并且易于在 JavaScript 应用程序中使用。
  2. 轻量级:JSON 格式非常轻量级,因此它非常适合在网络中传输大量数据。相比于 XML,它的数据量更小,传输速度更快。
  3. 跨平台和语言无关性:JSON 格式是一种跨语言的格式,它可以被许多不同语言的程序支持,易于解析和生成,几乎所有编程语言都支持 JSON。
  4. 易于阅读和操作:JSON 格式非常易于阅读和编写,因为它具有简单的语法和结构,格式清晰,具有良好的可读性。

缺点

  1. 不支持注释: JSON 格式不支持注释,这可能使得编写和维护复杂数据时变得有些困难。
  2. 不适合存储大量数据 JSON 格式无法直接表示二进制数据,这意味着它无法用于存储和传输图像、视频等二进制数据。并且,相比较于二进制,JSON的文本格式,在储存大量数据的时候会在占用非常多的储存空间。
  3. 不支持命名空间: JSON 不支持命名空间,这可能会导致不同的应用程序之间发生命名冲突。
  4. 不支持DTD: JSON 不支持 DTD,这使得在验证 JSON 数据格式时不太方便。

JSON 和 XML 的区别

其实现在数据交换,大家都是用JSON了,逐渐成为主流,xml用的越来越少了,不过还是有它自己独特的特性,在程序中没有好与坏,只有适不适合。

JSON 和 XML都是常用的数据交换格式。它们之间有什么区别呢?

  1. 简洁性与可读性:
    JSON 比 XML 更加简洁和易读。相比于 XML 的繁琐闭合标签,JSON 采用更为紧凑的表示形式,使得数据结构更清晰明了。
  2. 解析速度与带宽占用:
    JSON 的解析速度通常比 XML 更快,因为它的结构简单,不需要解析复杂的标签。总体内容变少了,导致JSON 数据通常占用的带宽更少,有助于提高传输效率。
  3. 数据复杂性:
    XML 比 JSON 更适合描述复杂的数据类型和嵌套结构。XML 支持命名空间和多种数据格式,这使得它在处理复杂数据和配置文件时具有优势。
  4. 注释支持:
    JSON 不支持注释,这意味着在数据中不能嵌入注释说明。而 XML 则支持注释,可以在数据文档中添加解释说明,便于维护和理解。

Python中如何读写JSON数据

只要你充分认识了JSON格式,其实也可以使用字符串拼接的形式构建一些简单的JSON字符串,但是局限性特别强,并且容易出错。

Python标准库中的json模块,提供了很多读写JSON数据的方法,下面我们来认识一下。

1、JSON模块的dump() 或 dumps() 函数将 Python 对象转换为 JSON 对象

dumps是将字典类型的数据转换为字符串,参数如下:

  • dictionary – 需要转换为 JSON 对象的字典。
  • indent – 定义缩进。

dump是将json数据写进文件,参数如下:

  • dictionary – 需要转换为 JSON 对象的字典。
  • file pointer – 在写入或追加模式下打开的文件。

当然你也可以通过文件的 write 方法写入json字符串

import json
data = {'name': 'zhangsan'}
# 返回字符串
json_str = json.dumps(data)
print(json_str)
# 写入文件
with open('data.json', 'w') as f:
    json.dump(data, f)

2、JSON模块的load() 或 loads() 函数将 JSON 字符串转换为 Python 对象

loads() 是将 JSON 对象的字符串转为Python字典,load() 函数可将 JSON 内容从 JSON 文件加载到字典中。

import json
dictionary = '{"name": "zhangsan"}'
json_obj = json.loads(dictionary)
print(json_obj) #{'name': 'zhangsan'}

with open('data.json', 'r') as f:
    json_obj = json.load(f)
print(json_obj) #{'name': 'zhangsan'}
print(type(json_obj)) #

Python中JSON的一些高级处理

上面介绍了最常用的功能,就那四个方法,下面认识一下json模块都有哪些高级功能。

自定义编码和解码

在一些复杂的场景中,你可能需要对Python对象进行自定义的序列化和反序列化。通过继承json.JSONEncoder和json.JSONDecoder类并重写相应的方法,你可以实现自定义的JSON编码和解码逻辑。

import json
class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, complex):
            return [obj.real, obj.imag]
        return json.JSONEncoder.default(self, obj)
# 使用自定义编码器
encoded_json = json.dumps(2 + 3j, cls=CustomEncoder)
print(encoded_json)  # 输出: [2.0, 3.0]

class CustomDecoder(json.JSONDecoder):
    def __init__(self):
        json.JSONDecoder.__init__(self, object_hook=self.object_hook)
    def object_hook(self, dct):
        if '__complex__' in dct:
            return complex(dct['__complex__'][0], dct['__complex__'][1])
        return dct
# 使用自定义解码器
decoded_obj = json.loads('{"__complex__": [2.0, 3.0]}', cls=CustomDecoder)
print(decoded_obj)  # 输出: (2+3j)

使用indent参数美化输出

在将Python对象转换为JSON字符串时,可以使用indent参数来指定缩进的空格数,从而使输出的JSON字符串更易读。这对于调试和查看复杂的JSON数据结构非常有帮助。

data = {'name': 'zhangsan'}
json_str = json.dumps(data, indent=4, ensure_ascii=False)
print(json_str)
#{
#    "name": "zhangsan"
#}

格式校验与异常处理

在我们使用json模块的过程中有时候会遇到一些异常情况,比如:数据格式不正确、编码问题、文件路径错误、数据类型不支持等。尤其是数据格式问题,这是经常遇到的,在解析日志文件时遇到一些数据存在多余的逗号或者括号位置出错等等问题。这需要我们特别注意,不要传输不合法的JSON数据。

当然,即使遇到了上述问题,通过恰当的异常处理机制,能够确保程序的健壮性。在编写处理JSON数据的代码时,应该始终记得对相关操作加上try-except块,以便捕获并处理异常。

  • 对于json.loads()和json.load()使用json.JSONDecodeError来捕获格式相关的错误。
  • 对于json.dumps()和json.dump()使用TypeError来捕获不支持类型的错误。
  • 对于编码错误,捕获UnicodeDecodeError或UnicodeEncodeError。
  • 对于文件访问错误,捕获FileNotFoundError。
json_str = "不是有效的JSON字符串"
try:
    # 尝试解析JSON
    data = json.loads(json_str)
except json.JSONDecodeError:
    print("输入的字符串不是有效的JSON格式")
except TypeError:
    print("解析函数需要一个字符串类型的参数")
except ValueError:
    print("输入字符串中包含无法解析的值")

相关推荐

驱动网卡(怎么从新驱动网卡)
驱动网卡(怎么从新驱动网卡)

网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...

2026-01-30 00:37 liuian

win10更新助手装系统(微软win10更新助手)

1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...

windows11专业版密钥最新(windows11专业版激活码永久)

 Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...

手机删过的软件恢复(手机删除过的软件怎么恢复)
手机删过的软件恢复(手机删除过的软件怎么恢复)

操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...

2026-01-29 23:55 liuian

一键ghost手动备份系统步骤(一键ghost 备份)

  步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。  步骤...

怎么创建局域网(怎么创建局域网打游戏)

  1、购买路由器一台。进入路由器把dhcp功能打开  2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。  3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...

精灵驱动器官方下载(精灵驱动手机版下载)

是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...

一键还原系统步骤(一键还原系统有哪些)

1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。  2、在弹出的“准备安装”窗口中,可...

电脑加速器哪个好(电脑加速器哪款好)

我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...

任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)

是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...

u盘怎么恢复文件(u盘文件恢复的方法)

开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...

系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)

1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...

剪贴板权限设置方法(剪贴板访问权限)
剪贴板权限设置方法(剪贴板访问权限)

1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...

2026-01-29 21:37 liuian

平板系统重装大师(平板重装win系统)

如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...

联想官网售后服务网点(联想官网售后服务热线)

联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...