python -- json 模块学习
程序员文章站
2024-02-03 10:14:10
...
JavaScript Object Notation,是一种 轻量级、跨平台、跨语言 的数据交换格式。广泛运用在各种语言的数据交换中。
JSON主要有两种数据结构:
1、由key--value对组成的数据结构。这种数据结构在不同的语言中有不同的实现,在python 中就是对应的字典。
2、有序集合、这种数据结构在不同语言中可能有list、vertor、数组和序列等实现。
JSON语法创建对象更像一种Map结构,它是一种由key-value对组成数据结构。
语法格式如下:
Student = {
Name:’redarmy_chen’,
……
Sex:’男’ --------- 注意:最后一个不加逗号,加了则报错。
}
备注:使用JSON语法创建对象时,属性不仅可是普通的字符,而且可以是任何基本数据类型,还可以是函数,数组,甚至是另外一个用JSON语法创建的对象.
Teacher = {
Name:’redarmy’,
Student:{
Name:’m_j’,
Sex:’男’
}
//使用JSON为teacher对象分配一个方法
toString:function(){
alert(“方法的测试…….”);
}
}
用于创建数组的语法:类似于 list 。
var a=new Array(); --- 使用创建数组对象的方法: 先创建一个对象
a[0]="chenc"
a[1]="hahah"
var a=new Array("chenc","hahah"); --- 创建对象的时候直接赋值
var a=["chenc","hahah"]; ---- 使用 json 语法来创建数组
JSON 对象 | Python 类型 |
---|---|
对象(object) | 字典 |
数组(array) | list |
字符串(string) | 字符串(str) |
整数(number(int)) | 整数(int) |
实数(number(real)) | 浮点数(float) |
true | True |
false | False |
null | None |
import json
print(dir(json))
['JSONDecodeError', 'JSONDecoder', 'JSONEncoder' 'decoder', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']
看看参数: 了解一下。
dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
default=None, sort_keys=False, **kw):
load(fp, *, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
default=None, sort_keys=False, **kw): --- 与 dump 参数一致。
loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw): -- 与 load 参数一致。
看看简单的应用场景:
import json
dic={'name':'alvin','age':23,'sex':'male'}
data=json.dumps(dic,sort_keys=True,indent=4) # 对 key 进行排序,并缩进
print(data,type(data))
# {
# "age": 23,
# "name": "alvin",
# "sex": "male"
# } <class 'str'>
print(json.loads(data),type(json.loads(data))) # {'name': 'alvin', 'age': 23, 'sex': 'male'} <class 'dict'>
data=json.JSONEncoder().encode(dic)
print(data) # {"name": "alvin", "age": 23, "sex": "male"}
实际上,dump 和 dumps 函数的功能和支持的选项都一致,只是后者直接返回 JSON 字符串,前者将字符串直接输出到文件中
其实,程序的 dump 和 dumps 都是调用 json.JSONEncoder 对象的 encode()方法。只是前者更简单高级,但是可说明我们可以对 JSONEncoder 类进行扩展,因为 python 有很多的数据类型 JSON 是不支持的,比如:复数,矩阵等。
import json
class ComplexEncoder(json.JSONEncoder): # 定义 JSONEncoder 的子类
def default(self, o):
if isinstance(o,complex): # 如果转换的类型是复数类型,由他负责的。
return {"__complex__":'true','real':o.real,'imag':o.imag} # 返回复数的 JSON 对象
return json.JSONEncoder.default(self,o)
s1=json.dumps(2+3j,cls=ComplexEncoder) # 通过 cls 属性指定使用 JSONEncoder 的自定义子类
s2=ComplexEncoder().encode(2+3j)
print(s1)
print(s2)
# {"__complex__": "true", "real": 2.0, "imag": 3.0}
# {"__complex__": "true", "real": 2.0, "imag": 3.0}
上一篇: Java判断主机是否能ping通代码实例
下一篇: springmvc统一返回数据格式