Python程序设计——json操作

当我们想要通过Python语言对json格式的文件进行读写操作的时候,首先我们需要引入json库

import json

我们使用Python标准库json库实现对json文件的基本读取和写入操作,在标准库中,主要涉及到四种方法:
json.dump 将一个python对象编码为json字符串并且保存到文件中
json.load 将一个json文件载入,并且返回一个python字典类型对象
json.dumps 将一个python对象编码为json字符串
json.loads 将一个json字符串转变为一个python字典对象

json.dumps方法

功能:将python对象编码为json字符串

方法:
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

例如:

import json

stu_json = json.dumps({"张三": "001", "李四":"002", "王五":"003"})

print(stu_json)

print(type(stu_json))

在上述代码中,我们把一个python字典类型的对象作为dumps方法的参数,并且打印方法的返回值和返回值的类型,得到如下输出:

{"\u5f20\u4e09": "001", "\u674e\u56db": "002", "\u738b\u4e94": "003"}
<class 'str'>

发现中文并没有正确显示,因此我们需要给dumps方法传入一个可选参数ensure_ascii=False,如下所示:

import json

stu_json = json.dumps({"张三": "001", "李四":"002", "王五":"003"}, ensure_ascii=False)

print(stu_json)

print(type(stu_json))

这个时候我们再次输出结果可以看到:

{"张三": "001", "李四": "002", "王五": "003"}
<class 'str'>

此时,程序的输出结果和我们的预期结果是一样的,中文被正确地显示出来了。通过print(type(stu_json))语句,我们可以看到输出结果是class ‘str’即dumps方法的返回值是一个字符串类型的数据。

import json

stu_json = json.dumps({"张三": "001", "李四":"002", "王五":"003"}, ensure_ascii=False,indent=4
                        , sort_keys=True, separators=(',', ':'))

print(stu_json)

这里面,ensure_ascii参数为是否使用ascii码方式,对于中文显示来说我们要设置为False;indent为设置每一个键值对前面的缩进空格数量;sort-keys为是否对键进行排序,排序方式为按照ascii码的升序方式;separator为设置分隔符,值得注意的是,分隔符的设置需要传入一个元组数据,第一个参数是分隔不同键值对之间的分隔符;第二个参数是分隔同一个键值对中,键和值之间的分隔符。代码运行结果如下:

{
    "张三":"001",
    "李四":"002",
    "王五":"003"
}

json.loads方法

功能:将一个json字符串转变为一个python字典对象

我们将刚刚输出的字符串当作参数传给loads方法,代码如下:

import json

stu_dict = json.loads("""{
    "张三":"001",
    "李四":"002",
    "王五":"003"
}""")

print(stu_dict)
print(type(stu_dict))

运行结果如下:

{'张三': '001', '李四': '002', '王五': '003'}
<class 'dict'>

通过输出结果不难发现,loads方法成功将json字符串对象转变成了python字典类型对象。

json文件操作——json.dump方法

大多数情况下,我们都需要进行json文件操作,json标准库中提供的json.dump方法就可以实现将python字典对象编码成json字符串对象并且保存到文件之中。以下是一个演示代码:

import json

stu_dict = {
    "张三":"001",
    "李四":"002",
    "王五":"003"
    }

with open('test.json', 'w') as f:  # 用写方式打开一个名为test.json的文件,如果不存在,则创建它
    json.dump(stu_dict, f)  # 写入文件

运行程序,就可以看到在这个.py文件的目录下会产生一个新建的test.json文件,打开可以看到文件内容:

{"\u5f20\u4e09": "001", "\u674e\u56db": "002", "\u738b\u4e94": "003"}

类似地,如果想要正确显示中文并且格式更加美观,我们依然需要向dump方法中传入必要的参数:

import json

stu_dict = {
    "张三":"001",
    "李四":"002",
    "王五":"003"
    }

with open('test.json', 'w') as f:
    json.dump(stu_dict, f, ensure_ascii=False, indent=4, separators=(',', ':'))

再次运行程序就可以看到新建的文件内容已经符合我们的预期:

{
    "张三":"001",
    "李四":"002",
    "王五":"003"
}

json文件操作——json.load方法

方法功能是从文件中读取json字符串,并且转换为python中的字典类型对象。我们将上一步中生成的test.json作为例子演示效果:

import json

with open('test.json', 'r') as f:  # 以读方式打开文件
    stu_dict = json.load(f)

print(stu_dict)
print(type(stu_dict))

程序运行结果如下:

{'张三': '001', '李四': '002', '王五': '003'}
<class 'dict'>

这样我们就成功实现了python语言读取json文件并且将其转化为字典(dict)对象。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,671评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,442评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,524评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,623评论 1 275
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,642评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,584评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,953评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,621评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,865评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,608评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,698评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,378评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,958评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,940评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,173评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,419评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,425评论 2 342

推荐阅读更多精彩内容

  • 常用模块 认识模块 什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文...
    go以恒阅读 1,933评论 0 6
  • dumps()和dump()的区别,loads()和load()的区别 Json简介 Json,全名 JavaSc...
    正经一米八阅读 1,078评论 0 1
  • 夏至蝈蝈蚯蚓出, 桃李枇杷均挂果, 万紫千红春欲辞, 田间地头忙栽种。 古作朱红迎夏至, 蚕豆竹笋素生嗟, 春萌夏...
    雅俗奇缘阅读 376评论 7 7
  • 黄奕涵学经汇报: 学经日期:2018年6月23日 周六 学经人员:妈妈和由由 宝贝年龄:5岁10个月 学经方法:1...
    恬淡罗罗阅读 175评论 0 0
  • 【 书名】把时间当做朋友 【读书时间】2018年6月1日 【作者】李笑来 【读书页数】150-207/ 333 一...
    剽悍走一走阅读 162评论 2 1