我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python中优雅处理JSON文件的方法实例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python中优雅处理JSON文件的方法实例

1. 引言

在本文中,我们将学习如何使用Python读取、解析和编写JSON文件。
我们将讨论如何最好地处理简单的JSON文件以及嵌套的JSON文件,当然我们也将讨论如何访问Json文件数据中的特定值。

2. 什么是JSON文件?

JSON(Java Script Object Notation)是一种流行的文件格式,主要用于在web应用程序中存储和传输数据。如果我们经常和数据打交道,那么一定或多或少遇到过JSON格式的文件,因此我们有必要来学习如何读取和写入JSON。

下图为常见的JSON文件结构的示例.

JSON结构看起来和Python中的字典非常类似。需要注意的是,JSON格式通常是由key: 结对组成,其中key是字符串形式,value是字符串、数字、布尔值、数组、对象或null。

为了更直观的进行说明,在下图中我们以蓝色突出显示了所有的key,同时以橙色突出显示了所有的value。请注意,以下每组key/value间均使用逗号进行区分。

3. 使用Python处理JSON文件

在Python中内置了用于读取JSON文件的函数。以下给出几个如何将JSON文件解析为Python对象的示例。

3.1. 将JSON文件读取为字典类型

首先我们需要导入 json库, 接着我们使用open函数来读取JSON文件,最后利用json.load()函数将JSON字符串转化为Python字典形式.

就这么简单,代码如下:


import json
 
with open('superheroes.json') as f:
    superHeroSquad = json.load(f)
    
print(type(superHeroSquad))  # Output: dict
print(superHeroSquad.keys())
# Output: dict_keys(['squadName', 'homeTown', 'formed', 'secretBase', 'active', 'members'])

上述代码很简单很直观啦,唯一需要注意的是json库中有load()和loads()两个函数.

函数load()作用为读取JSON文件生成Python对象函数loads()作用为读取JSON 字符串流生成Python对象

我们可以将loads()函数中的字符s的含义理解成 load for strings.

3.2. 将JSON文件读取为Pandas类型

当然我们也可以使用Pandas库中的 read_json函数来读取对应的JSON文件,

代码如下:


import pandas as pd
df = pd.read_json('superheroes.json')

运行结果如下:

需要注意的是使用Pandas库不仅仅可以读取电脑本地磁盘上的JSON文件,也可以通过URL读取网络上存放的文件.

代码如下:


df1 = pd.read_json('https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json')

3.3. 使用Pandas读取嵌套JSON类型

我们有时候遇到的JSON文件是嵌套的,这经常会让读取工作变得有些困难. 其实嵌套JSON和Python中的嵌套字典思想类似,即字典中嵌套字典.

我们观察上述例子中的member字段,其值也为字典类型,下图中我们使用缩进来展示嵌套结构。

设想一下,当我们将JSON文件加载到Pandas数据框架中时,members列如下所示。每行包含一个字典。


接下来我们讨论两种实现方法,这两种方法中,我们可以解析数据,以便将每个键分解为单独的一列。

方案一

我们可以在members这一列上使用apply方法,代码如下:


df['members'].apply(pd.Series)

上述代码执行后,members列会被拆分为4个新列,如下所示:

当然如果你想将上述拆分后的结果和之前的结果进行合并,可以使用pd.concat函数,

代码如下:


df = pd.concat([df['members'].apply(pd.Series), df.drop('members', axis = 1)], axis = 1)

方案二

在Pandas库中还有一个函数 json_normalize() ,它允许我们把嵌套的JSON展开。这是最简单的方法来解析嵌套的JSON了。

代码如下:


def test2():
    with open('superheroes.json') as f:
        superHeroSquad = json.load(f)
    out = pd.json_normalize(superHeroSquad, record_path=['members'],
                      meta=['squadName', 'homeTown', 'formed', 'secretBase', 'active'])
    print(out)

上述代码中:

  • record_path为我们希望拆分的列的名字
  • meta为列名的list,为我们输出的次序

运行结果如下:

最后我们需要注意的是,我们可以在上述函数json_normalize中添加参数 meta_prefix,这样可以让我们对meta中的名字添加统一的前缀。

代码如下:


pd.json_normalize(superHeroSquad, 
	record_path = ['members'], 
	meta = ['squadName', 'homeTown', 'formed', 'secretBase', 'active'], 
	meta_prefix = 'members_')

运行结果如下:

3.4. 访问特定位置的数据

在Python中我们可以通过Key的名字或者下标来访问JSON文件中任意位置的数据。

比如,假设我们想知道我们的第二个超级英雄的秘密身份。即在下图中,需要访问特定位置的数据在下图中以紫色突出显示。

为了得到这个值,我们可以直接使用以下语句:


superHeroSquad['members'][1]['secretIdentity']

从层次结构的顶部开始,由上往下,我们需要的第一个key是'members',因为它是我们需要访问的值所在的父节点。

在‘members'对应的键值中,我们看中括号,然后下标1表示list中的第二个成员。接着我们来看字段'secretIdentity',如下所示:

将上述过程合并在一起,我们就可以得到我们特定位置出的值为'Jane Wilson'。

细心的同学可能已经注意到,我在上面的JSON片段中突出显示了两个蓝色的值。希望感兴趣的同学们可以作为练习来尝试访问这些值。欢迎在文章后面的评论区中分享你的代码。

3.5. 导出JSON

让我们编辑一下我们最后一位超级英雄,将其secretIdentity从‘Unknow'更改为‘Will Smith',接着将这个字典导出为JSON文件。这里我们将使用json.dump()函数将字典写入文件。

代码如下:


#update secret identity of Eternal Flame
superHeroSquad['members'][2]['secretIdentity'] = 'Will Smith'
with open('superheroes.json', 'w') as file:
    json.dump(superHeroSquad, file)

上述代码运行后,我们打开文件superheroes.json,可以发现最后一名超级英雄的secretIdentity已经由Unknow变为了Will Smith.

当然,作为选择,我们也可以使用Pandas中的to_json()函数,完成上述功能。


df.to_json('superheroes.json')

3.6. 格式化输出

我们有时候在终端直接打印json文件,通常会得到很不美观的输出,样例如下:

为了让其看起来更加美观,我们这里可以在函数json.dump中采用参数indent参数来控制输出格式,代码如下:


with open('superheroes.json', 'w') as file:
    json.dump(superHeroSquad, file, indent = 4)

结果输出如下,是不是看上去更加美观啦。。。

3.7. 输出字段排序

当然dump函数中含有字段sort_key,通过设置其值,可以控制输出时是否对key进行排序。需要注意所有的key包括嵌套的key都会进行排序。

样例如下:


with open('superheroes.json', 'w') as file:
    json.dump(superHeroSquad, file, indent = 4, sort_keys = True)

运行结果如下:

4.总结

最后,让我们对本文做一下回顾,总结如下:

  • JSON文件通常由key:结对组成,这里key通常为字符串格式,value一般为字符串,数字,布尔,数组,对象或者null
  • Python有内置函数可以方便的读取JSON文件转化为Python中的字典类型或者Pandas可以处理的类型
  • 使用pd.read_json()来读取简单的JSON,使用pd.json_normalize()来读取嵌套的JSON
  • 我们可以通过key的名字或者下标来方便的获取JSON文件中特定位置的值
  • Python对象可以转化为JSON文件,同时可以对输出进行格式化输出以增加可读性

5.参考

链接一

到此这篇关于Python中优雅处理JSON文件的文章就介绍到这了,更多相关Python优雅处理JSON文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python中优雅处理JSON文件的方法实例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中优雅处理JSON文件的方法是什么

这篇文章给大家介绍Python中优雅处理JSON文件的方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 引言我们将学习如何使用Python读取、解析和编写JSON文件。我们将讨论如何最好地处理简单的JSON
2023-06-22

python中解析json格式文件的方法示例

前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSO
2022-06-04

Python读写Json涉及到中文的处理方法

今天在帮前端准备数据的时候,需要把数据格式转成json格式,说实话,涉及到中文有时候真的是很蛋疼,除非对Python的编码规则比较了解,不然处理起来真的很蛋疼。 整个逻辑 我们需要处理的是把一些文章处理,生成多个html文件,然后用json
2022-06-04

python 读写txt文件 json文件的实现方法

首先第一步,打开文件,有两个函数可供选择:open() 和 file()①. f = open('file.txt',‘w')...file.close() ②. f = file('file.json','r')... file.cl
2022-06-04

python中多种文件处理的方法

基础操作在python 中,文件的操作分为面向目录和面向文件的,本质都是一样的。面向目录的常见操作见下表:方法作用方法作用os.getcwd()得到当前目录os.listdir()列出所有文件和目录os.removedirs( xxx)删除
2023-01-31

Vuex中actions优雅处理接口请求的方法

在项目开发中,如果使用到了vuex,通常我会将所有的接口请求单独用一个文件管理,这篇文章主要介绍了Vuex中actions如何优雅处理接口请求,业务逻辑写在actions中,本文给大家分享完整流程需要的朋友可以参考下
2022-11-16

SpringBoot读取资源目录中JSON文件的方法实例

最近做项目遇到需要将json类型的配置文件引用到项目中,已经将读取json文件的方法封装成工具类,下面这篇文章主要给大家介绍了关于SpringBoot读取资源目录中JSON文件的相关资料,需要的朋友可以参考下
2023-05-15

Python中实现优雅的switch操作的方法小结

本文介绍了5种在Python中实现优雅switch操作的方法,包括使用字典、getattr()函数、元组、自定义枚举和functools.singledispatch()装饰器。每种方法都有其优缺点,选择最合适的方法取决于案件数量、类型和代码复杂性。本文还提供了方法选择指南,供读者参考。
Python中实现优雅的switch操作的方法小结
2024-04-02

Python脚本实时处理log文件的方法

这个Python脚本是用来对实时文件的内容监控,比如 Error 或者 time out 字段都可以进行自定义;算是我的第一个真正的Python脚本,自己感觉还是比较臃肿,不过打算放到blog上记录一下(还是初学者,大神们勿喷哈),真心希望
2022-06-04

Python中有哪些处理文件方法

这篇文章给大家介绍Python中有哪些处理文件方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1 、读取文件数据文本文件可存储的数据量非常丰富,像天气数据、交通数据、文学作品等。每当我们需要分析或修改储存在文件中的信
2023-06-16

如何优雅地删除 Linux 中的垃圾文件的方法

不知道大家是否也跟我一样,是一只要把的自己电脑文件安排的条理有序,把没用的文件会及时删掉的程序猿呢?如果是的话,那么我们可以愉快地探讨下文章的内容。如果不是的话,你也可以留下来凑凑热闹嘛(>-<)。 下面要介绍的是今天的主角—— tmpwa
2022-06-03

Python处理文本文件中控制字符的方法

控制字符控制字符(Control Character),或者说非打印字符,出现于特定的信息文本中,表示某一控制功能的字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通讯专用字符:SO
2022-06-04

在Go语言中优雅地处理方法重载的替代方案

go语言中没有方法重载,但可以使用替代方案实现类似行为:函数变量:定义具有不同参数集的函数,并将其存储在变量中,根据需要调用适当的函数。接口类型:定义一个接口类型,其中包含具有不同参数集的多个方法,并实现该接口以提供特定行为。嵌套类型:将方
在Go语言中优雅地处理方法重载的替代方案
2024-04-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录