JSON的基本格式
JSON就是一种特殊的字符串,他并不像程序或者代码那样会自己运行,其实他就是一种有固定格式的文本。按照特定格式进行书写,便于程序进行解析里面的数据。
入门级
JSON一定是以一个大括号开头,一个大括号结尾的,且成对出现,不可能只有一个前括号,没有后括号,那样是错的。所有的内容都应该在这个大括号中
如下所示,就是一个空的JSON串。就是说,只要是一对大括号,里面不管有没有值,他都是一个正确的JSON。
{}
如果我想用JSON的方式告诉其他人,有个人的名字叫咕咕,这时候,我们的JSON可以这样写
{
"name":"咕咕" // 冒号前的我们成为属性,属性一定要用双引号包起来 [值]除了是数字,子json串,列表的情况下不用双引号包起来,其他情况也必须用双引号包起来
}
上面这个就是一个标准的JSON字符串。JSON串里面 冒号前面的我们叫做[属性名称]或者叫[键],冒号后面的我们叫做[值],我们把键和值统一成为[键值对],就是一对一对的键和值。因为键和值不会单独存在,都是成对出现的。键值对中间用冒号做分隔符。
所以上面的JSON我们就可以说,这个JSON有个name属性,它的值是"咕咕"。
上面是JSON串的基本结构,如果有多个键值对,我们用逗号隔开每一个键值对,比如:有个人名字叫咕咕,年龄为18 ,性别是男,我们可以这样写
{
"name":"咕咕", // 两个键值对之间 一定要用 逗号 隔开,不然程序无法将两个键值对区分开
"age":18,
"gender":"男"// 最后一个键值对后面一定不要写 逗号 不管你在其他地方看到有没有写,最后一个键值对后面不写 逗号 绝对是正确的
}
两个键值对之间 一定要用 逗号 隔开,而且[值]是数字、子json串(就是用大括号括起来的,后面讲)、列表(有些人把列表叫做数组)的情况下(用中括号表示,后面会讲到),不用双引号包起来,其他情况必须使用双引号包起来
现在这个JSON字符串的内容就开始丰富起来了。就可以表示很多的信息了,但是还不够。比如我有三个苹果,我想把苹果的重量和价格都通过这个JSON串展示出来怎么办呢?
编号 | 重量 | 价格 | |
第一个苹果 | 1 | 300克 | 3元 |
第二个苹果 | 2 | 200克 | 2元 |
第三个苹果 | 3 | 350克 | 3.5元 |
这个时候,我们就可以使用列表来表示了
{
"name":"咕咕",
"age":18,
"gender":"男",
"apples":[ // 这里的中括号,代表这中括号里面的数据是个列表,也一定前后两个括号成对出现
{}, // 第一个苹果的数据就写在这个JSON串里,列表中每个数据之间依然必须用逗号隔开
{}, // 第一个苹果的数据就写在这个JSON串里
{} // 第一个苹果的数据就写在这个JSON串里,列表中最后一个数据必须不写逗号
]
}
把苹果的数据写进去就是这样的
{
"name":"咕咕",
"age":18,
"gender":"男",
"apples":[ // 这里的中括号,代表这中括号里面的数据是个列表,也一定前后两个括号成对出现
{"no":1,"weight":"300克","price":"3元"}, // 第一个苹果的数据就写在这个JSON串里,列表中每个数据之间依然必须用逗号隔开
{"no":2,"weight":"200克","price":"2元"}, // 第一个苹果的数据就写在这个JSON串里
{"no":3,"weight":"350克","price":"3.5元"} // 第一个苹果的数据就写在这个JSON串里,列表中最后一个数据必须不写逗号
]
}
这样就把最上面表格中的苹果数据,以JSON串的形式展示出来了。
一般来说,为了看起来比较有层次性,我们会将格式自己格式化一下。就变成下面这样了
{
"name": "咕咕",
"age": 18,
"gender": "男",
"apples": [ // 这里的中括号,代表这中括号里面的数据是个列表,也一定前后两个括号成对出现
{
"no": 1, // 这种单纯的数字,不用加引号,加上一般情况下也不会错
"weight": "300克",
"price": "3元"
}, // 第一个苹果的数据就写在这个JSON串里,列表中每个数据之间依然必须用逗号隔开
{
"no": 2,
"weight": "200克",
"price": "2元"
}, // 第一个苹果的数据就写在这个JSON串里
{
"no": 3,
"weight": "350克",
"price": "3.5元"
} // 第一个苹果的数据就写在这个JSON串里,列表中最后一个数据必须不写逗号
]
}
列表里面除了有多个JSON串外,还可以是字符串,或者数字。
比如咕咕现在手里面有很多app的密码,要给他记录下来。我们就可以在上面的JSON串里面再加一个属性passwords。
{
"name": "咕咕",
"age": 18,
"gender": "男",
"apples": [// 这里的中括号,代表这中括号里面的数据是个列表,也一定前后两个括号成对出现
{
"no": 1,// 这种单纯的数字,不用加引号,加上一般情况下也不会错
"weight": "300克",
"price": "3元"
},// 第一个苹果的数据就写在这个JSON串里,列表中每个数据之间依然必须用逗号隔开
{
"no": 2,
"weight": "200克",
"price": "2元"
},// 第一个苹果的数据就写在这个JSON串里
{
"no": 3,
"weight": "350克",
"price": "3.5元"
}// 第一个苹果的数据就写在这个JSON串里,列表中最后一个数据必须不写逗号
],// 这个中括号是apples这个属性值的结束标记,由于下面还有新的属性,所以两个属性之间用逗号隔开
"passowords": [
"abcdef",
"dsasge",
123455,
321
]// 列表里面的每个元素都用逗号隔开,元素可以是任意类型(字符串,数组,子json串,甚至列表)
}
属性的值也可以是一个JSON串
现在咕咕小朋友有了一个媳妇儿,怎么把他的媳妇儿也记录到他的信息中去呢,这个时候就需要添加一个新的属性wife,因为wife也是一个人,她也有属于自己的名字、年龄等,所以wife这个属性的值也可以用JSON串来存她的所有属性。
比如咕咕媳妇儿的名字是龙龙,年龄是16,性别...额自然是女,我们先把他媳妇儿的JSON串写出来
{
"name": "龙龙",
"age": 16,
"gender": "女"
}
然后我们将上面的信息放在咕咕的wife属性中。
{
"name": "咕咕",
"age": 18,
"gender": "男",
"apples": [// 这里的中括号,代表这中括号里面的数据是个列表,也一定前后两个括号成对出现
{
"no": 1,// 这种单纯的数字,不用加引号,加上一般情况下也不会错
"weight": "300克",
"price": "3元"
},// 第一个苹果的数据就写在这个JSON串里,列表中每个数据之间依然必须用逗号隔开
{
"no": 2,
"weight": "200克",
"price": "2元"
},// 第一个苹果的数据就写在这个JSON串里
{
"no": 3,
"weight": "350克",
"price": "3.5元"
}// 第一个苹果的数据就写在这个JSON串里,列表中最后一个数据必须不写逗号
], // 这个中括号是apples这个属性值的结束标记,由于下面还有新的属性,所以两个属性之间用逗号隔开
"passowords": [
"abcdef",
"dsasge",
123455,
321
],// 列表里面的每个元素都用逗号隔开,元素可以是任意类型(字符串,数组,子json串,甚至列表)
"wife": {
"name": "龙龙",
"age": 16,
"gender": "女"
}
}
这样,这个JSON串就看起来非常复杂了。一般我们看着复杂的JSON串,我们就会利用工具,对JSON串进行格式化,便于观看。这里可以在线搜索一些在线JSON串格式化工具。比如
JSON在线编辑器--SO JSON在线https://www.sojson.com/editor.html
我们将上面的JSON字符串复制到他的JSON视图标签下的输入框中
点击解析JSON,就能很简洁清晰的看到第一个层级的所有属性。这时候我们找到对应的属性,点击展开,就可以看到我们关注的属性的值了,就不会觉得JSON串太复杂了。我们一层一层的展开我们需要的那部分数据,不需要的那部分数据就折叠着,就不会从心理上感到害怕啦。
点击wife前面的小箭头,就可以展开看见wife的详细信息啦(再次点击小箭头,又会折叠回去)
我们再点击apples,就可以看到apples列表元素了
我们看到,apples列表中有三个元素,我们想看哪个元素的详细信息,就点击某个元素前方的小箭头。就可以展开看到详细了