JSON

简单介绍Python中的JSON模块详细介绍 osetc.com(2)

字号+ 作者:H5之家 来源:H5之家 2017-03-24 15:00 我要评论( )

data len is : 30 4 indented data: a : 123 , b : 789 , c : 456 decoded DATA: u 'b' : 789 len of decoded DATA: 33 json主要是作为一种数据通信的格式存在的,无用的空格会浪费通信带宽,适当时候也要对数据进

data len is: 30
4 indented data:
{
  "a": 123,  
  "b": 789,  
  "c": 456
}
decoded DATA: u'b': 789}
len of decoded DATA: 33

json主要是作为一种数据通信的格式存在的,无用的空格会浪费通信带宽,适当时候也要对数据进行压缩。separator参数可以起到这样的作用,该参数传递是一个元组,包含分割对象的字符串,其实质就是将Python默认的(‘, ‘,': ‘)分隔符替换成(’,’,':’)。

1
2
3
4
5
6

data :::123}
data)
data))
json.
json.
json.

输出:

1
2
3
4
5

DATA: : : 789}
repr(data)       : 30
dumps(data)      : 30
dumps: 46
dumps(data, separators): 25

另一个比较有用的dumps参数是skipkeys,默认为False。 dumps方法存储dict对象时key必须是str类型,其他类型会导致TypeError异常产生,如果将skipkeys设为True则会优雅的滤除非法keys。

1
2
3

data :::123}
data)
json.

输出:

1
2

original data: : : : 789}
json encoded : 789}

2,JSON处理自定义数据类型

json模块不仅可以处理普通的python内置类型,也可以处理我们自定义的数据类型,而往往处理自定义的对象是很常用的。

如果直接通过json.dumps方法对Person的实例进行处理的话,会报错,因为json无法支持这样的自动转化。通过上面所提到的json和 python的类型转化对照表,可以发现,object类型是和dict相关联的,所以我们需要把我们自定义的类型转化为dict,然后再进行处理。这里,有两种方法可以使用。

方法一:自己写转化函数

自定义object类型和dict类型进行转化:encode-定义函数 object2dict()将对象模块名、类名以及__dict__存储在一个字典并返回;decode-定义dict2object()解析出模块名、类名、参数,创建新的对象并返回。在json.dumps()中通过default参数指定转化过程中调用的函数;json.loads()则通过 object_hook指定转化函数。

方法二:继承JSONEncoder和JSONDecoder类,覆写相关方法

JSONEncoder类负责编码,主要是通过其default函数进行转化,我们可以重载该方法。对于JSONDecoder,亦然。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74

#handling private data type
#define class
:
  name,age):
    self.name = name
    self.age = age
  :
    ..age)
   
   
#define transfer functions
def object2dict(obj):
  #convert object to a dict
  d :obj.__class__.__name__, '__module__':obj.__module__}
  d.
  return d
   
def dict2object(d):
  #convert dict to object
  d:
    class_name
    module_name
    module module_name)
    module
    class_ module,class_name)
    args key.value
    args)
    inst = class_(**args) #create new instance
  else:
    inst = d
  return inst
#recreate the default method
class LocalEncoder(json.JSONEncoder):
  obj):
    #convert object to a dict
    d :obj.__class__.__name__, '__module__':obj.__module__}
    d.
    return d
   
class LocalDecoder(json.JSONDecoder):
  :
    json.object_hook
  d):
    #convert dict to object
    d:
      class_name
      module_name
      module module_name)
      class_ module,class_name)
      args key.value
      inst = class_(**args) #create new instance
    else:
      inst = d
    return inst
#test function
if __name__ == '__main__':
  p
  print p
  #json.dumps(p)#error will be throwed
  d = object2dict(p)
  d
   
  o = dict2object(d)
  oo))
   
  dump = json.dumps(p,default=object2dict)
  dump
  load = json.loads(dump,object_hook = dict2object)
  load
  d p)
  o d)
   
  d
  o),o

输出:

1
2
3
4
5
6
7
8
9
10
11

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Python 之 json 模块

    Python 之 json 模块

    2017-03-16 17:00

  • Python模块学习之json

    Python模块学习之json

    2017-03-12 08:02

  • Python学习之保存json文件并格式化详解

    Python学习之保存json文件并格式化详解

    2017-03-11 16:02

  • Python保存json文件并格式化

    Python保存json文件并格式化

    2017-03-01 16:02

网友点评