json介绍
json的元素有对象(object),数组(array),字符串(str),数字(number),布尔量(true,false),和空值(null)
json对象
json对象的特征是以大括号开始和结尾,内部元素为key-value的键值对,也可以为空,但是这个空是什么都不写,而不是json数值的空,{}单独的一对大括号,是一个空的json对象,如果写成{null},是不符合json规范的。
key一定是字符串类型的,value可以是上述元素的任意一种,中间有":"隔开,是英文标点的冒号,使用过程中注意不要用成汉语。键值对之间使用","逗号分隔,下面是一些关于json对象的例子
//空的json对象
{
}
//单键值对的json对象
{
"test":null
}
{
"test":1
}
{
"test":"str"
}
{
"test":false
}
{
"test":{}
}
{
"test":[]
}
//多键值对的json对象
{
"object":{},
"array":[],
"number(int)": 1,
"number(real)":1.0,
"string":"str",
"bool":true,
"none":null
}
json数组
josn数组中的元素为单纯的json元素,不牵涉key-value对,只是单纯的value,各个value之间使用逗号隔开,同样不写元素时,为空
//空的json数组
[]
//非空的json数组
//这个json数组不是空的,内部有一个元素,元素的值为null
[null]
//元素为json对象
[{}]
//元素为json数组
[[]]
//元素为整形数字
[1]
//元素为实型数字
[1.0]
[1e10]
[1.45456546e2]
//布尔值
[true]
//字符串
["str"]
[null,{},[],1,"str"]
python数据结构介绍
上面介绍完json以后,大家有没有觉得是否有点眼熟呢,key-value,这不就是字典,所谓的json数组,不就是可以任意塞对象的列表。
因此,python的json操作,就是把json转化成python自己的数据结构进行处理。
import json
json_obj_str = "{\"test\":[]}"
json_obj = json.loads(json_obj_str)
print(type(json_obj))#这一行输出的是<class 'dict'>,也就是字典
print(type(json_obj["test"]))#这一行输出的是<class 'list'>,也就是列表
json_arr_str = "[{}]"
josn_arr = json.loads(json_arr_str)
print(type(json_arr))#这一行输出的是<class 'list'>,也就是列表
print(type(json_arr[0]))#这一行输出的是<class 'dict'>,也就是字典
#列表转化为json字符串
print(json.dumps(json_arr))
上面的代码段是json字符串和字典或者列表的转化,其中原始的字符串可以来自于文件或者网络发送的协议。转化完成的字符串可以做多种处理
那么一个符合json格式的字典或者列表如何转化为json字符串呢
json提供了一个函数叫json.dumps(json_obj),函数还有其他参数,比较关键的两个参数是ensure_ascii和indent,如果不指定第一个参数为false,输出的汉字会变成\xff之类的字符,不指定第二个indent时,输出的字符串不会换行,一般取值为4,正好是一个tab键的距离