用python解析JSON

先来认识下JSON


JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

简单点说,设计JSON这种格式,主要是为了方便数据交换

引用模块


import json

基本操作


  • 编码:把一个python对象编码转换成一个json字符串json.dumps()
  • 解码:把一个json字符串转换成一个python对象json.loads()

转化表


1.Python->JSON

Python JSON
dict object
list,tuple array
str,unicode string
int,long,float number
True true
False false
None null

2.JSON->Python

JSON Python
object dict
array list
string unicode
number(int) int,long
number(float) float
true True
false False

json.dumps()


1.编码,该方法返回了一个str对象encodedjson

>>> import json
>>> dict={"a":1,"b":2,"c":{"d":3,"e":(4,5)}}
>>> type(dict)
<type 'dict'>
>>> s=json.dumps(dict)
>>> type(s)
<type 'str'>
>>> print s
{"a": 1, "c": {"e": [4, 5], "d": 3}, "b": 2}

2.json.dumps方法还提供了很多好用的参数可供选择,比较常用的有sort_keys(对dict对象进行排序,我们知道默认dict是无序存放的),separatorsindent等参数。

sort_keys

>>> data1 = {'b':789,'c':456,'a':123}
>>> data2 = {'a':123,'b':789,'c':456}
>>> d1=json.dumps(data1,sort_keys=True)
>>> d2=json.dumps(data2,sort_keys=True)
>>> d3=json.dumps(data2)
>>> print d1
{"a": 123, "b": 789, "c": 456}
>>> print d2
{"a": 123, "b": 789, "c": 456}
>>> print d3
{"a": 123, "c": 456, "b": 789}
>>> print d1==d2
True
>>> print d1==d3
False

indent参数是缩进的意思,可以使得数据存储的格式变得更加优雅

>>> data1 = {'b':789,'c':456,'a':123}
>>> d1=json.dumps(data1,sort_keys=True,indent=3)
>>> print d1
{
   "a": 123,
   "b": 789,
   "c": 456
}

separator参数可以移除多余的空白符,来达到数据压缩的目的。该参数传递是一个元组,包含分割对象的字符串。

>>> data1 = {'b':789,'c':456,'a':123}
>>> len(data1)
3
>>> len(repr(data1))
30
>>> len(json.dumps(data1))
30
>>> len(json.dumps(data1,indent=2))
40
>>> len(json.dumps(data1,separators=(',',':')))
25

注意:
1.separators = (',', ':')为固定,是理想的分割结果
2.str()一般是将数值转成字符串。
repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。如list,dict使用str()是无效的,但使用repr可以,这是为了看它们都有哪些值,为了显示之用。

>>> a = 'hello'
>>> a
'hello'
>>> repr(a)
"'hello'"
>>> print repr(a)
'hello'
>>> str(a)
'hello'
>>> print str(a)
hello

json.loads()


解码

>>> data1 = {'b':789,'c':456,'a':123}
>>> s=json.dumps(data1)
>>> type(s)
<type 'str'>
>>> s1=json.loads(s)
>>> type(s1)
<type 'dict'>
>>> print s1
{u'a': 123, u'c': 456, u'b': 789}
>>> print s
{"a": 123, "c": 456, "b": 789}
>>> print s1['a']
123

注:loads方法返回了原始的对象,但是仍然发生了一些数据类型的转化。比如,上例中‘a’转化为了unicode类型。

参考


Python官方文档
Json概述以及python对json的相关操作

暂时就这么多了,之后还会更新有关python的内容=_=

原文地址:https://www.cnblogs.com/dockerchen/p/6565323.html