python操作json

日期: 2019-12-15 03:18 浏览次数 :

正文实例呈报了Python中json格式数据的编码与解码方法。分享给我们供大家参谋,具体如下:

json介绍

说明:JSON(JavaScript Object Notation卡塔尔国是生龙活虎种轻量级的数据沟通格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1997)的二个子集。 JSON接收完全部独用立于言语的文本格式,不过也利用了就好像于C语言宗族的习于旧贯(包蕴C, C++, C#, Java, JavaScript, Perl, Python等)。这么些特征使JSON成为卓绝的数据沟通语言。易于人阅读和编写制定,同一时候也轻松机器深入分析和生成。

至于json更为详细的从头到尾的经过,能够参见其官网:http://www.json.org
从官网上采撷部分,精晓一下json的协会:
JSON创设于二种布局:

  • 名称/值”对的集合(A collection of name/value pairs)。差异的语言中,它被清楚为对象(object),纪录(record),构造(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),只怕关联数组 (associative array)。
  • 值的有种类表(An ordered list of values)。在大部分言语中,它被驾驭为数组(array)。

  • python标准库中有json模块,首假使实施体系化和反系列化作用:

种类化:encoding,把三个python对象编码转变成json字符串,json.dumps(卡塔尔国
反类别化:decoding,把json格式字符串解码转变为python数据对象,json.loads(卡塔尔国

python从2.6版本开端内置了json数据格式的拍卖办法。

一般json

1、json格式数据编码

查阅json使用格局

>>> import json
>>> json.__all__
['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONEncoder']

在python中,json数据格式编码使用json.dumps方法。

encoding: dumps()

>>> data = [{"name":"qiwsir", "lang":("python", "english"), "age":40}]
>>> print data
[{'lang': ('python', 'english'), 'age': 40, 'name': 'qiwsir'}]
>>> data_json = json.dumps(data)
>>> print data_json
[{"lang": ["python", "english"], "age": 40, "name": "qiwsir"}]

encoding的操作是比较简单的,请小心观望data和data_json的两样——lang的value从元组形成了列表,还应该有例外:

>>> type(data_json)
<type 'str'>
>>> type(data)
<type 'list'>

将python对象转变为json类型,是安分守纪下表所示对照关系转变的:

python json
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None null
#!/usr/bin/env python
#coding=utf8
import json
users = [{'name': 'tom', 'age': 22}, {'name': 'anny', 'age': 18}]
#元组对象也可以
#users = ({'name': 'tom', 'age': 22}, {'name': 'anny', 'age': 18})
#输出[{"age": 22, "name": "tom"}, {"age": 18, "name": "anny"}]
print json.dumps(users)

decoding: loads()

decoding的历程也像上边同样轻松:

>>> new_data = json.loads(data_json)
>>> new_data
[{u'lang': [u'python', u'english'], u'age': 40, u'name': u'qiwsir'}]

亟需静心的是,解码之后,并未有将元组还原。

解码的数据类型对应关系:

json python
object dict
array list, tuple
string str, unicode
number(int) int, long
number(read) float
true True
false False
null None

上面包车型客车data都不是十分短,还能够凑合阅读,倘使十分短了,阅读就有难度了。所以,json的dumps(卡塔尔(英语:State of Qatar)提供了可选参数,利用它们能在出口上对人更要好(那对机器是不在乎的)。

>>> data={'a':'aaa', 'b':'bbb', 'c':[{'c1':'cc1', 'c2':'cc2'}]}
>>> data_j = json.dumps(data, sort_keys=True, indent=2)
>>> print data_j
{
  "a": "aaa", 
  "b": "bbb", 
  "c": [
    {
      "c1": "cc1", 
      "c2": "cc2"
    }
  ]
}

sort_keys=True意思是遵照键的字典顺序排序,indent=2是让每一种键值对显示的时候,以缩进七个字符对齐。那样的视觉效果好些个了。

对此字典,json会如若key是字符串(字典中的任何非字符串key都会在编码时调换为字符串),要适合JSON标准,应该只对python列表和字典实行编码。别的,在WEB应用中,把最顶层对象定义为字典是生龙活虎种标准做法。

里面users能够是元组对象,也足以是列表对象。对象内的因素得以是数字、字符串、元组、列表、None、布尔值。

大json字符串

风度翩翩经数据不是超级大,上边的操作丰富了。不过,上边操作是将数据都读入内部存款和储蓄器,借使太大就优异了。把数据归入文件,你能够动用 json.dump(卡塔尔国 和 json.load(卡塔尔国 来编码和平解决码JSON。

#!/usr/bin/env python
#coding=utf8
import json
random = (5, [1, 2], "tom" is good", (1, 2), 1.5, True, None)
#输出[5, [1, 2], "tom" is good", [1, 2], 1.5, true, null]
print json.dumps(random)

dump功能

# 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件
>>> with open('tmp.json', 'w') as f:
...   json.dump(data_j, f)
... 

> cat tmp.json
{"a": "aaa", "c": [{"c2": "cc2", "c1": "cc1"}], "b": "bbb"}

2、json格式数据解码

load功能

>>> with open('tmp.json', 'r') as f:
...   data = json.load(f)
... 
>>> print data
{u'a': u'aaa', u'c': [{u'c2': u'cc2', u'c1': u'cc1'}], u'b': u'bbb'}
  • 从数据文件中读取数据,并将json编码的字符串转变为python的数据构造

在python中json格式数据解码使用json.loads方法,把上边的例子搬来用:

#!/usr/bin/env python
#coding=utf8
import json
random = (5, [1, 2], "tom" is good", (1, 2), 1.5, True, None)
jsonObj = json.dumps(random)
#输出[5, [1, 2], u'tom" is good', [1, 2], 1.5, True, None]
print json.loads(jsonObj)

此处正是先对一个多少json编码,然后再将编码后的数额解码。照理说,解码后的多少应当和原先的多少大器晚成致,可是大家开采这里元组对象都被替换到列表对象了。那边就关系到python和json互相调换的数量格式定义了。看上面五个图:

  • 上一篇:GO http
  • 下一篇:没有了