json是一种常用的数据交换结构,由于轻量、易于阅读和编写等特点,在网络方面应用很广。下面这篇文章主要介绍了python对json解析的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
json简介
json(javascript object notation) 是一种轻量级的数据交换格式。它基于javascript(standard ecma-262 3rd edition - december 1999)的一个子集。 json采用完全独立于语言的文本格式,但是也使用了类似于c语言家族的习惯(包括c, c++, c#, java, javascript, perl, python等)。这些特性使json成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
它的格式一般是这样的:
对象是一个无序的“‘名称/值'对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值' 对”之间使用“,”(逗号)分隔。
例如下面这样:
{"b": "hello", "c": null, "a": true}
它的值可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
使用python编码和解析json
python内置了json包来帮助我们完成对json的操作。
将python的字典结构导出到json使用json.dumps() ,将json读成python的字典结构,使用json.loads() 。
如果不是针对string操作而是对文件操作,分别使用json.load()函数和json.dump()函数。
import json
data = {
'name' : 'acme',
'shares' : 100,
'price' : 542.23
}
json_str = json.dumps(data)
data = json.loads(json_str)
# writing json data to file
with open('data.json', 'w') as f:
json.dump(data, f)
# reading data back
with open('data.json', 'r') as f:
data = json.load(f)
默认的类型对应如下:
jsonpython
object dict
array list
string unicode
number (int) int, long
number (real) float
true true
false false
null none
其他数据类型与json之间的编码和解码
一般来说,python对json的解析是list或dict之间的操作,如果需要其他类型与json之间转换,就需要object_hook参数。先定义一个类,将类的字典初始化成json的key-value键值对。这样,json的参数就变成了类的属性。
将一个json字典转换为一个python对象python
>>> class jsonobject:
... def __init__(self, d):
... self.__dict__ = d
...
>>>
>>> data = json.loads(s, object_hook=jsonobject)
>>> data.name
'acme'
>>> data.shares
50
>>> data.price
490.1
还可以通过指定“函数”来进行转换。
用函数来指定序列化的方法,即将对象的“属性-值”对变成字典对,函数返回一个字典,然后json.dumps会格式化这个字典。
如果是通过函数将json变成对象,首先获得类名,然后通过__new__来创建一个对象(不调用初始化函数),然后将json字典的各个属性赋给对象。
使用函数指定json转换方式python
def serialize_instance(obj):
d = { '__classname__' : type(obj).__name__ }
d.update(vars(obj))
return d
# dictionary mapping names to known classes
classes = {
'point' : point
}
def unserialize_object(d):
clsname = d.pop('__classname__', none)
if clsname:
cls = classes[clsname]
obj = cls.__new__(cls) # make instance without calling __init__
for key, value in d.items():
setattr(obj, key, value)
return obj
else:
return d
使用方法如下:
>>> p = point(2,3)
>>> s = json.dumps(p, default=serialize_instance)
>>> s
'{"__classname__": "point", "y": 3, "x": 2}'
>>> a = json.loads(s, object_hook=unserialize_object)
>>> a
<__main__.point object at 0x1017577d0>
>>> a.x
2
>>> a.y
3
相关推荐:
python对json的解析详解
python对json字符串判断的方法实例
深入理解python对json的操作总结
以上就是深入理解python对json的解析_python的详细内容。