你真的理解json数据的格式么?

1. pythonz 字典与json字符串

在web服务领域,系统之间传递数据最常用的格式便是json,他很容易理解,因为绝大多数场景下,你见到的json数据都和字典是一样的。有时,你复制一段json数据就可以把它当做字典来使用,至少在python中是这样的,然而它们之间并不能划等号,下面的代码将向你展示他们之间的不同

import json

data = {'text': "a/b/c", 3:4}
res = json.dumps(data)
print(res)


data2 = json.loads(res)
print(data2)

程序输出结果

{"text": "a/b/c", "3": 4}
{'text': 'a/b/c', '3': 4}

python字典可以使用json.dumps方法转为json字符串,但这个转换后的字符串却不一定能够使用json.loads方法转为python字典,原因在于,json字符串里,所有的key都必须是字符串。

2. json的格式

json数据,从形式上看有两种,一种是大括号形式的object,一种是中括号形式的数组。

对于这两种形式的json数据,我们很难用简练的语言进行描述,但画图却可以将json数据的定义清晰的表达出来,先来看object 形式的json数据

json object

看懂这张图并不难

  1. object 形式的json以{ 开头,以} 结尾
  2. 图中形成了一个闭环,这表示这条闭环上的元素可以重复
  3. 大括号里的元素,使用逗号分隔
  4. 每个元素都是string : value 的形式,json数据里的key必须是字符串
  5. 大括号里也可以一个元素都没有
  6. 图中有很多whitespace,可以理解为空格,但这个空格实际使用时可有可无

再来看一下数组形式的json数据
json array

  1. 数组形式的json以[ 开始,以 ] 结束
  2. 中括号内元素以逗号分隔
  3. 中括号里可以没有任何元素
  4. 中括号里的元素是value

两张图里都出现了value,再将value的定义理解清楚,那么json数据的格式也就了然了

json

  1. value的值可以是string,number,object,array,true,false,null
  2. value前后也有whitespace

由于value可以是object和array,因此json可以嵌套很多层,这看起来和字典真的非常相似,关于json,其实还有很多细节的地方可以研究,不过掌握到这里对于我们认识理解json就已经足够了,如果你想继续深入研究,推荐你看这篇文章ECMA-404 The JSON Data Interchange Standard.

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案