详细介绍一下Python如何对JSON格式数据进行处理?

在Python中对于JSON数据的处理是在日常开发中的常见需求之一。通常情况下,对JSON数据的处理主要涉及到如下的的几个步骤

  • 对于JSON数据的解析操作
  • 对于JSON数据的处理操作
  • 对于JSON数据的格式转换操作

在Python中我们可以通过json 这个标准库来实现对于JSON数据的上述操作,下面我们就来详细介绍一下如何在Python中通过json库来处理JSON数据。

想要所使用json库,首先需要导入json处理模块,由于它是属于Python语言内置的JSON数据处理的标准库,所以在使用的时候不需要安装直接进行导入就可以了,如下所示。

导入模块库之后,接下来我们就来看看如何将JSON字符串转换成Python对象,例如可以将JSON字符串转换成字典或者是列表的形式。如下所示,我们可以通过json.loads()方法,来从字符串中加载JSON数据。

这种情况下,我们可以将这个字符串转换成一个字典对象。

当然除了从字符串中获取JSON数据之外,我们还可以通过json.load()的方法从一个JSON文件中获取到文件内容并且将其加载为一个Python对象,如下所示。假设我们有一个data.json的JSON文件,内容如下。

接下来,我们就可以通过json.loads()的方法从文件中加载到JSON数据并且将其转换为一个Python对象。如下所示。

通过上面的方式,我们可以将JSON数据转换成了一个Python的对象,这里需要注意JSON对象会被转换为字典,JSON数组对象会被转换为列表,其内部元素会被转换为字典。有了这样的转换之后,我们就可以像是操作普通操作对象一样的方式来操作这个转换之后的Python对象。

介绍完成如何将JSON数据加载为Python对象的方式之后,接下来我们来看看如何将Python对象转换为JSON格式的字符串。

一般情况下,我们可以通过json.dumps()方法将Python对象转换为JSON字符串,如下所示,我们先定义了一个字典,然后通过json.dumps()方法转换成字符串。

根据上面的方法,我们既然可以从JSON格式数据中读取到JSON数据来进行Python对象的转换操作,那么我们就可以通过json.dump()方法将Python对象转换为JSON字符串将其写入到文件中,如下所示。

在将Python对象转换为JSON字符串的时候,json.dump()方法还提供了一些额外的参数进行JSON输出格式的修改,如下所示。

  • indent:通过这个参数,我们可以来设置缩进的级别用来美化输出格式。
  • sort_keys:通过这个参数,我们可以设置对象Key可以按照字典排序。
  • separators:通过这个参数,我们可以指定分隔符,因为在默认情况下是(\”, \”, \”: \”),我们也可以根据自己的需求来进行动态调整。

如下所示,我们可以通过参数设置来美化JSON输出。

根据Key按照字典进行排序。

在实际开发过程中,可能由于系统之间的对接问题导致JSON数据格式不符合标准的处理格式,这样在通过json模块进行JSON数据处理的时候,就会抛出JSONDecodeError异常,这个时候就需要我们通过Python的异常处理机制来捕获并且处理这些异常,如下所示。

通过异常处理机制,可以使得我们的应用程序更加健壮。

在实际开发中,除了对于JSON数据最为基础的解析以及序列化操作之外,在json模块中还提供了一些高级的处理功能,下面我们就来介绍一下Python中一些常用的JSON高级处理方案。

在实际开发中,我们可能会因为业务需求将Python对象转换为JSON数据,或者是将JSON数据转换为Python对象,有些需求可能需要我们通过自定义的方式来实现这个转换操作,这个时候,我们就需要来继承json.JSONEncoder和json.JSONDecoder类来实现自定义的JSON数据转换逻辑。

如下所示,我们可以通过继承json.JSONEncoder来实现一个自定义的Python对象转换JSON数据的编码器,在进行相关处理逻辑的时候,可以通过这个编码器来实现自定义编码操作。

在上面的实现中,我们自定义了一个日期对象的编码器,在处理日期对象的时候,可以通过这个编码器来进行指定格式的日志编码。

同样的,我们可以继承json.JSONDecoder来实现就日期的解码器,将复杂日期格式转换为我们需要的Python对象的数据格式,如下所示,将字符串解析为datetime对象。

这样我们就完成了自定义日期类型的转换。

根据上面的实现步骤,在Python中对于JSON格式数据的处理主要涉及到三个方面的内容,对于JSON数据的解析、对于JSON数据的反解析、对于JSON数据的实际处理。在上面的介绍中,我们展示了最为基础的JSON数据格式处理方式。当然在实际处理中,还有很多高级用法,有兴趣的读者可以关注博主,学习更多Python相关的内容。

干货 | 如何利用Python处理JSON格式的数据,建议收藏

作者: 俊欣

来源: 关于数据分析与可视化

JSON数据格式在我们的日常工作中经常会接触到,无论是做爬虫开发还是一般的数据分析处理,今天,小编就来分享一下当数据接口是JSON格式时,如何进行数据处理进行详细的介绍,内容分布如下

  • 什么是JSON
  • JSON模块的使用方法

什么是JSON

JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式,通常是以键值对的方式呈现,其简洁和清晰的层次结构使得JSON成为理想的数据交换语言,而在Python中处理JSON格式的模块有json和pickle两个

  • json模块和pickle都提供了四个方法:dumps, dump, loads, load
  • 序列化:将python的数据转换为json格式的字符串
  • 反序列化:将json格式的字符串转换成python的数据类型

序列化

首先我们来看一下序列化是如何操作的,我们首先用json.dump()将字典写入json格式的文件中

能够进行类似操作的则是dataframe当中的to_json()方法,比方说

而当你分别打开这两个文件时,里面的内容分别是以键值对呈现的json数据。另外,我们看到有json.dumps()和json.dump(), 两者看着十分的相似,但是在功能上可是大相径庭,json.dump()进行的是对json文件的读写操作,就比如上述的例子中,我们将字典数据写入json的文件中用的就是json.dump,而json.dumps()则是聚焦于数据本身类型的转换,对数据的操作,比如

反序列化

在反序列化的过程中,我们需要用到的则是json.load()和json.loads()方法,比如说

可以看到的是变量teachers的类型是字典类型,所以可以通过相应的方式来获取以及改变其中的数值以及格式,另外一种方法则是通过pandas模块中的read_json()方法,例如

从上述的例子中可以看出,json.load()主要处理的是json格式的文件,而json.loads()主要是对JSON编码的字符串进行数据类型的转换,

总结

本文主要是讲了序列化与反序列化的相关操作步骤,读者需要在其中留心的则是json.loads()与json.load(),以及json.dumps()和json.dump()之间的区别和使用场景,总的来说

  • json.loads():是将json格式的字符串(str)转换为字典类型(dict)的数据
  • json.dumps():返回来,是将字典类型(dict)的数据转换成json格式的字符串
  • json.load():用于读取json格式的文件,将文件中的数据转换为字典类型(dict)
  • json.dump():主要用于存入json格式的文件,将字典类型转换为json形式的字符串

JSON是什么?JSON的使用详解

无论做前端还是后端开发,数据传输的时候都需要用到json格式,今天我们就来聊聊什么是json,怎么使用json格式数据传输。

JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但是JSON是独立于语言的文本格式,许多编程语言都支持JSON格式的数据解析和生成。

  1. 文本格式:JSON是一种纯文本格式,可以存储和传输数据。
  2. 语言无关性:虽然基于JavaScript,但JSON可以被多种编程语言解析。
  3. 数据交换:常用于Web应用之间的数据交换。
  4. 易于阅读和编写:格式简洁,易于理解和使用。
  5. 自我描述:结构清晰,不需要额外的解释文档。

JSON数据格式支持以下几种数据结构:

  • 对象:由花括号{}包围,包含一系列键值对。
  • 数组:由方括号[]包围,包含一系列值。
  • 字符串:必须用双引号\”包围。
  • 数字:整数或浮点数。
  • 布尔值truefalse
  • null:表示空值。

在这个例子中,我们创建了一个包含多个属性的对象。属性包括基本数据类型、数组和嵌套对象。

在不同的编程语言中解析JSON的方法不同,以下是一些示例:

创作不易,如果这篇文章对你有用,欢迎点赞关注加评论哦。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。