Json 是一种常用的数据交换结构,由于轻量、易于阅读和编写等特点,在网络方面应用很广。下面这篇文章主要介绍了 Python 对 Json 解析的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
Python 是一种面向对象、解释型计算机程序设计语言,由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。Python 语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起。
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 读成 Python 的字典结构,使用
- json.dumps()
。
- 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)
默认的类型对应如下:
JSON | Python |
---|---|
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 变成对象,首先获得类名,然后通过
来创建一个对象(不调用初始化函数),然后将 json 字典的各个属性赋给对象。
- __new__
使用函数指定 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 能带来一定的帮助,如果有疑问大家可以留言交流。
来源: http://www.phperz.com/article/17/0316/326316.html