json的语法格式,{"key":value},需要注意以下几点:
1.Jso是一种纯字符数据,不是编程语言;
2.json数据以键值对形式存在,多个键值对之间用逗号隔开,之间对的键和值之间用冒号链接
3.json的数据用花括号“{}”或中括号“[]”包裹
4.json的键值对的键部分,必须用双引号包裹,单引号不行(在python中单引号也表示字符,但如果用单引号的字符串键值对,不能转换成json格式)
5.json数据结束后,不允许出现没有意义的逗号,如{“a”:1,}
转自:https://blog.csdn.net/qq_40994972/article/details/84189430
字典是一种数据结构,而json是一种数据格式,
格式就会有一些形式上的限制,比如json的格式要求必须且只能使用双引号作为key或者值的边界符号(值如果是数字可以不用加双引号),不能使用单引号,用单引号或者不用引号会导致读取数据错误,而且“key”必须使用边界符(双引号),但字典就无所谓了,可以使用单引号,也可以使用双引号。
总结:
json的特点
- 字符串外边有单引号
- json是类字典的形式,里面的键-值对规定必须使用双引号,值如果是数字可以不加双引号,
但是键必须是双引号引起来的字符串, json的值可以是普通变量,数组,json对象
缺点:
json只有null、布尔、数字、字符串、数组和对象这几种数据类型,JSON没有日期类型
字典可能是json,json一定是字典
json.dumps() : json-->str 或者也可以写成dict-->str
总之json.dumps()是将其他类型的转化成string类型
举例:
aa={"A":"b"} # type(aa)=dict
aa1=json.dumps(aa) #type(aaa)=str,也就是说aa数据类型是dict,但是数据格式是json的,所以对于aa能用json.dumps(aa),不会报错
print(type(aa1)) # str
aa2={'A':'B'} # type(aa2)=dict
aa3=json.dumps(aa2)
print(type(aa3)) #str
print(aa3) # {"A": "B"}
a2='{"A":"b"}'
a3=json.loads(a2) #string-->dict
print(type(a3)) #dict,
print(a3) #{'A': 'b'},此时a3是dict,但不是json,因为该字典的输出格式是单引号括起来的,想以json的格式输出需要转一下,见下面的a4
a4=json.dumps(a3) #dict-->json
print("a4's type :",type(a4)) # str, 同时它的数据格式也是json,但是用type()时会输出dict,不会输出json,因为json是一种数据格式,不是数据类型
print("a4's content",a4) #{"A": "b"}
dict可以输出为json格式,string也可以输出为json格式,即表现为json形式
例子:
users = {
"admin": {
'username': 'admin',
"password": 123,
"nickname": "老王"
}
}
print(type(users)) # dict
users1=json.dumps(users,indent=4)
print(type(users1)) #str
print(users1) # {"admin": {"username": "admin", "password": 123, "nickname": "\u8001\u738b"}}
print(type(users)) # 输出是dict
为什么不是json格式呢?因为里面的键值对没有全部用双引号引起来,所以在json.cn中打开,不能正常展示
users_dict=json.dumps(users)
print(type(users_dict)) # dict
printusers_dict) #{"admin": {"username": "admin", "password": 123, "nickname": "\u8001\u738b"}}
json.dumps()是将 json-->str
你可能会有这样的疑问,users不是json啊,