【Python】使用python中的json模块

Json简介:Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式。最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式。

Python2.6及以上的版本可以直接import json进行使用,不需要下载json包了。
json模块支持python的大部分内置类型与Json进行转换。
json模块提供了四个方法

dumps   #encode,将python对象转换为json对象
loads   #decode,将json对象转换为python对象
dump    #encode,将python对象转换为可以存储到文件的fp文件流
load    #decode,将fp文件流转换为python对象

Encode过程,是把python对象转换成json对象的一个过程,常用的两个函数是dumps和dump函数。两个函数的唯一区别就是dump把python对象转换成json对象生成一个fp的文件流,而dumps则是生成了一个所有程序语言都认识的字符串。
Decode过程,是把json对象转换成python对象的一个过程,常用的两个函数是loads和load函数。区别跟dump和dumps是一样的。
来看看他们的参数

json.dump(obj, fp, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, encoding, default, **kw)
json.dumps(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, encoding, default, **kw)

json.load(fp, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
json.loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)

dumps接受一个python对象作为必须参数(其他参数可选),而这个对象可以是任何python的数据类型。

data = ['username','age','others']
print type(data)
test = json.dumps(data)
print type(test)
print test
print ''
data1 = (1,2,3)
print type(data1)
test1 = json.dumps(data1)
print type(test1)
print test1
print ''
data2 = {"user":"whaike","age":24}
print type(data2)
test2 = json.dumps(data2)
print type(test2)
print test2
print ''
data3 = "what fuck ..."
print type(data3)
test3 = json.dumps(data3)
print type(test3)
print test3
print ''
data4 = None
print type(data4)
test4 = json.dumps(data4)
print type(test4)
print test4
#结果
#<type 'list'>
#<type 'str'>
#["username", "age", "others"]
#
#<type 'tuple'>
#<type 'str'>
#[1, 2, 3]
#
#<type 'dict'>
#<type 'str'>
#{"age": 24, "user": "whaike"}
#
#<type 'str'>
#<type 'str'>
#"what fuck ..."
#
#<type 'NoneType'>
#<type 'str'>
#null

其他就不列举了,详细如下(python -> json)


Paste_Image.png

而loads与其相反,将json编码的字符串再转换为python的数据结构。详细如下(json ->python)


Paste_Image.png

其他常用参数说明:
Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key。

ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示。
indent:应该是一个非负的整型,如果是0,或者为空,则一行显示数据,否则会换行且按照indent的数量显示前面的空白,这样打印出来的json数据也叫pretty-printed json。
separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(',',':');这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。
encoding:默认是UTF-8,设置json数据的编码方式。
sort_keys:将数据根据keys的值进行排序。
部分学习代码片段

dic1 = {'type':'dic1','username':'loleina','age':16}
json_dic1 = json.dumps(dic1)
print json_dic1
json_dic2 = json.dumps(dic1,sort_keys=True,indent =4,separators=(',', ': '),encoding="gbk",ensure_ascii=True )
print json_dic2

#结果
#{"username": "loleina", "age": 16, "type": "dic1"}
#{
#    "age": 16,
#    "type": "dic1",
#    "username": "loleina"
#}

如果把实例中的key'username'的value换成中文的“测试”,

dic1 = {'type':'dic1','username':'测试','age':16}
json_dic1 = json.dumps(dic1)
print json_dic1
json_dic2 = json.dumps(dic1,sort_keys=True,indent =4,separators=(',', ': '),encoding="utf8",ensure_ascii=False )
print json_dic2

#结果
#{"username": "\u6d4b\u8bd5", "age": 16, "type": "dic1"}
#{
#    "age": 16,
#    "type": "dic1",
#    "username": "测试"
#}
 # dump功能
 # 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件
 with open('D:/tmp.json', 'w') as f:
     json.dump(data, f)
 # load功能
 # 从数据文件中读取数据,并将json编码的字符串转换为python的数据结构
 with open('D:/tmp.json', 'r') as f:
     data = json.load(f)

参考如下,侵删
python对json的操作总结
python---Json
官网json— JSON encoder and decode

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

推荐阅读更多精彩内容

  • 目的: 将 Python 对象编码为 JSON 字符串,并将 JSON 字符串解码为 Python 对象。 jso...
    yongxinz阅读 904评论 3 15
  • 常用模块 认识模块 什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文...
    go以恒阅读 1,932评论 0 6
  • 1. 认识模块 1.1 什么是模块 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.p...
    hswangxun阅读 609评论 0 1
  • 一、json模块 在Python中json是一个非常常用的模块,这个主要有4个方法: 1、json.dumps 2...
    酷飒de小姐姐阅读 740评论 0 3
  • 一 序列化模块 什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。 比如,我们在pyth...
    100斤的瘦子_汤勇阅读 911评论 0 0