看来json不先讲完那是不行的,那么我们就先把json讲完吧。
json的格式相信大家在第二卷时就已经知道了个大概,即:
{元素:值}(1.9版本以前)
{“元素“:值}(1.9版本即以后)
其中,值可能是字符串、数字、布尔值等奇奇怪怪的东西,有些要加引号(比如字符串),有些不需要加引号。
但是其实json还带有另一种格式,这种格式它并不是用大括号包起来的,而是用中括号,即:
[对元素:值](1.9版本以前)
[“元素“:值](1.9版本以后)
你可能会问:哎这两种格式不是一模一样吗?
其实是不一样的,不一样的地方就在于前者有多个对象时只能:
{“text“:“我的天淦***“,“color“:“red“}
或者是{“text“:“我的天“,“color“:“red“,“extra“:[{“text“:“淦“},{“text“:“***“}]}
而后者却可以这样子:
[{“text“:“我的天“,“color“:“red“},“淦“,“***“]
或者是
[{“text“:“我的天“,“color“:“red“},{“text“:“淦“},{“text“:“***“}]
都可以达到上面大括号的效果。
这是为什么呢?
其实中括号就相当于把大括号里元素extra给独立出来一个格式,而extra就是一个json列表,这后面会讲到。zuqi.org 葡萄小说网
所以中括号虽然能把元素给拆分成一段一段的列表,但无法像大括号一样直接列出来,比如上面的:
{“text“:“我的天“,“color“:“red“,“text“:“淦“,“text“:“***“}
如果把{}换成就不行了,就会报错。想让其不报错只能拆成一段一段的列表。
而且实际上json的全格式就是中括号,大括号格式只不过是从中括号里面拆出来的。
其实中括号这个格式没有你们想象的那么简单,注意到上面的中括号第一个例子中的“淦“和“***“了吗?它们并没有被加上“text“。
但他们确实就是text。
这是为什么?其实这就是一种偷懒的方法。
因为json最常用的就是text元素,所以json的作者就觉得这么多text看着太眼花缭乱。就简化了。
但是这种简化只能在中括号格式里用,大括号里不能用。
这又是为什么?
其实在json里,被大括号包起来的整个就是一个对象。所以大括号格式本身就只有一个对象。
而中括号格式里可以放很多个大括号,所以中括号里可以有很多个对象。
而上面这种简化方式,它简化后就变成了一个对象,因为它不能再添加其他的比如color的参数,自然就不能在大括号里放了,只能在中括号放。
(所以这种简化方式不止是删了text,还删除了大括号?)
(没错,所以就更不可能在大括号里放了,不然就会变成大括号里再套大括号,格式就不对了)
既然这种简化方式本身并不能添加参数,那么如果要修改颜色该怎么办?
这就要说到对象的类别了。
在json列表里(就是上面说的中括号格式),从左往右数的第一个对象其中的参数会影响其余的所有对象,所以我们通常把第一个对象叫做父对象,而其余的对象叫做子对象。
这个名称取得很符合现实,毕竟现实中也是会基因遗传的嘛。
当然,和现实一样,子对象也可以通过额外添加参数来改变自己,当然父对象遗传下来的参数没有被改变的话仍然是留在那里的。(注意,改变单个子对象的参数并不会改变后面全部子对象的参数看,因为这些子对象都是同级的。如果想改变单个子对象并同时改变后面的子对象,只能把后面的子对象全部变成该子对象的子对象,即孙子对象)
所以你可以通过在父对象就设置好参数,然后在子对象里写简化的文本,比如:
[{“text“:““,“color“:“red“},“淦“}
但需要注意的一点是,列表里的每一个对象里都必须要有一个显示内容的元素,比如text或score。当然你也可以将元素留空,这样子就不会出现任何的其他文本了。
(额,这样子直接把第二个对象的内容写在第一个对象里不好吗.......)
对哦,这样子更省事唉。
这些就是json的格式了。