分享

Python中优雅处置惩罚JSON文件的方法实例

云技术五哥 发表于 2022-1-8 09:15:32 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 7890
目次


  • 1. 引言
  • 2. 甚么是JSON文件?
  • 3. 利用Python处理惩罚JSON文件

    • 3.1. 将JSON文件读与为字典范例
    • 3.2. 将JSON文件读与为Pandas范例
    • 3.3. 利用Pandas读与嵌套JSON范例
    • 3.4. 会见特定地位的数据
    • 3.5. 导出JSON
    • 3.6. 格局化输出
    • 3.7. 输出字段排序

  • 4.总结
  • 5.参考

1. 引言

正在本文中,我们将进修如何利用Python读与、剖析战编写JSON文件。
我们将会商如何最好天处理惩罚简朴的JSON文件和嵌套的JSON文件,固然我们也将会商如何会见Json文件数据中的特定值。

2. 甚么是JSON文件?

JSON(Java Script Object Notation)是一种盛行的文件格局,次要用于正在web使用程序中存储战传输数据。假设我们常常战数据挨交讲,那末必然或多或少碰着过JSON格局的文件,因而我们有需要去进修如何读与战写进JSON。
下图为常睹的JSON文件构造的示例.
web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(1)
                               
登录/注册后可看年夜图

JSON构造看起去战Python中的字典十分相似。需求留意的是,JSON格局凡是是由key: 结对构成,其中key是字符串形式,value是字符串、数字、布我值、数组、工具或null。
为了更曲不雅的停止分析,鄙人图中我们以蓝色凸起表示了一切的key,同时以橙色凸起表示了一切的value。请留意,以下每组key/value间均利用逗号停止辨别。
web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(2)
                               
登录/注册后可看年夜图


3. 利用Python处理惩罚JSON文件

正在Python中内乱置了用于读与JSON文件的函数。以下给出几个如何将JSON文件剖析为Python工具的示例。

3.1. 将JSON文件读与为字典范例

起首我们需求导进 json库, 接着我们利用open函数去读与JSON文件,最初操纵json.load()函数将JSON字符串转化为Python字典形式.
便那么简朴,代码以下:
  1. import json

  2. with open('superheroes.json') as f:
  3.     superHeroSquad = json.load(f)
  4.    
  5. print(type(superHeroSquad))  # Output: dict
  6. print(superHeroSquad.keys())
  7. # 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文件,
代码以下:
  1. import pandas as pd
  2. df = pd.read_json('superheroes.json')
复造代码
运转结果以下:
web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(3)
                               
登录/注册后可看年夜图

需求留意的是利用Pandas库不单单能够读与电脑当地磁盘上的JSON文件,也能够经由过程URL读与收集上寄存的文件.
代码以下:
  1. df1 = pd.read_json('https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json')
复造代码

3.3. 利用Pandas读与嵌套JSON范例

我们偶然候碰着的JSON文件是嵌套的,那常常会让读与事情变得有些艰难. 实在嵌套JSON战Python中的嵌套字典思维相似,即字典中嵌套字典.
我们察看上述例子中的member字段,其值也为字典范例,下图中我们利用缩出去展现嵌套构造。
web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(4)
                               
登录/注册后可看年夜图

设想一下,当我们将JSON文件减载到Pandas数据框架中时,members列以下所示。每止包罗一个字典。
web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(5)
                               
登录/注册后可看年夜图

接下去我们会商两种完成办法,那两种办法中,我们能够剖析数据,以便将每一个键合成为零丁的一列。

  1. 计划一
复造代码
我们能够正在members那一列上利用apply办法,代码以下:
  1. df['members'].apply(pd.Series)
复造代码
上述代码施行后,members列会被拆分为4个新列,以下所示:
web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(6)
                               
登录/注册后可看年夜图

固然假设您念将上述拆分后的结果战之前的结果停止兼并,可使用pd.concat函数,

代码以下:
  1. df = pd.concat([df['members'].apply(pd.Series), df.drop('members', axis = 1)], axis = 1)
复造代码
  1. 计划两
复造代码
正在Pandas库中另有一个函数 json_normalize() ,它许可我们把嵌套的JSON展开。那是最简朴的办法去剖析嵌套的JSON了。
代码以下:
  1. def test2():
  2.     with open('superheroes.json') as f:
  3.         superHeroSquad = json.load(f)
  4.     out = pd.json_normalize(superHeroSquad, record_path=['members'],
  5.                       meta=['squadName', 'homeTown', 'formed', 'secretBase', 'active'])
  6.     print(out)
复造代码
上述代码中:

         
  • record_path为我们祈望拆分的列的名字     
  • meta为列名的list,为我们输出的次第
运转结果以下:
web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(7)
                               
登录/注册后可看年夜图

最初我们需求留意的是,我们能够正在上述函数json_normalize中增加参数 meta_prefix,多么可让我们对meta中的名字增加统一的前缀。
代码以下:
  1. pd.json_normalize(superHeroSquad,
  2.         record_path = ['members'],
  3.         meta = ['squadName', 'homeTown', 'formed', 'secretBase', 'active'],
  4.         meta_prefix = 'members_')
复造代码
运转结果以下:
web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(8)
                               
登录/注册后可看年夜图


3.4. 会见特定地位的数据

正在Python中我们能够经由过程Key的名字大要下标去会见JSON文件中随便地位的数据。
好比,假定我们念明白我们的第两个超等豪杰的机密身份。即鄙人图中,需求会见特定地位的数据鄙人图中以紫色凸起表示。
web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(9)
                               
登录/注册后可看年夜图

为了获得那个值,我们能够间接利用以下语句:
  1. superHeroSquad['members'][1]['secretIdentity']
复造代码
从层次构造的顶部开端,由上往下,我们需求的第一个key是'members',因为它是我们需求会见的值地点的女节面。
web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(10)
                               
登录/注册后可看年夜图

正在‘members'对应的键值中,我们看中括号,然后下标1暗示list中的第两个成员。接着我们去看字段'secretIdentity',以下所示:
web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(11)
                               
登录/注册后可看年夜图

将上述历程兼并正在一同,我们就能够获得我们特定地位出的值为'Jane Wilson'。

  1. 仔细的同窗能够曾经留意到,我正在上里的JSON片断中凸起显现了两个蓝色的值。期望感爱好的同窗们能够做为操练去测验考试会见那些值。欢送正在文章前面的批评区平分享您的代码。
复造代码

3.5. 导出JSON

让我们编纂一下我们最初一名超等豪杰,将其secretIdentity从‘Unknow'变动为‘Will Smith',接着将那个字典导出为JSON文件。那里我们将利用json.dump()函数将字典写进文件。
代码以下:
  1. #update secret identity of Eternal Flame
  2. superHeroSquad['members'][2]['secretIdentity'] = 'Will Smith'
  3. with open('superheroes.json', 'w') as file:
  4.     json.dump(superHeroSquad, file)
复造代码
上述代码运转后,我们翻开文件superheroes.json,能够发明最初一位超等豪杰的secretIdentity曾经由Unknow变成了Will Smith.
固然,做为挑选,我们也能够利用Pandas中的to_json()函数,完成上述功用。
  1. df.to_json('superheroes.json')
复造代码

3.6. 格局化输出

我们偶然候正在末端间接挨印json文件,凡是会获得很不雅的输出,样例如下:
web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(12)
                               
登录/注册后可看年夜图

为了让其看起去愈加美观,我们那里能够正在函数json.dump中接纳参数indent参数去掌握输特别式,代码以下:

  1. with open('superheroes.json', 'w') as file:
  2.     json.dump(superHeroSquad, file, indent = 4)
复造代码
结果输出以下,是否是看上来愈加美观啦。。。

web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(13)
                               
登录/注册后可看年夜图


3.7. 输出字段排序

固然dump函数中露有字段sort_key,经由过程设置其值,能够掌握输出时能否对key停止排序。需求留意一切的key包含嵌套的key城市停止排序。
样例如下:
  1. with open('superheroes.json', 'w') as file:
  2.     json.dump(superHeroSquad, file, indent = 4, sort_keys = True)
复造代码
运转结果以下:
web前端-云社区Python中优雅处置惩罚JSON文件的方法实例byun.com(14)
                               
登录/注册后可看年夜图


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文件内乱容请搜刮剧本之家从前的文章或持续浏览上面的相干文章祈望各人当前多多撑持剧本之家!
                                                         
       以上所述是云社区专客手艺小编经心给各人收拾整顿的本常识相干引见;期望对亲们进修事情提拔有所协助。                                     若有任何疑问、相干分享交换等,可正在本文章底部留行或批评; 欢送IT手艺妙手亦或菜鸟们各持己见、万马齐喑,让云社区成为IT手艺更好的交换进修仄台;   正在此更万分感激各人对云社区专客网站的撑持!                                                                                                                                                                                                                                                                                            
滥觞:云社区转戴;            免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
回复

使用道具 举报

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

香港云服务器免费试用