第一百二十七章 JSON剩下の一些东西
我们知道,在JSON里,对象有分为父对象和子对象,第一个对象肯定是接下来的对象的父对象。
只不过这种父对象子对象一般只会在[]这种JSON列表里才会遇到,{}里一般用不到。
如果{}里也要分父对象和子对象呢?那就要使用“extra”元素了,这位元兄已经在之前出过很多次场了。
extra是这么用的:
{“内容元素“:“一些内容“,“extra“:[{},{}......]}
没错,使用extra,就可以在一个对象里再放入许许多多的对象。只不过这时候你可能会问:唉那extra里面的这些对象的父对象到底是哪个对象呢?
很简单,我们可以拿JSON的列表说话:
[““,{“内容元素“:“一些内容“,“extra“:[{},{}......]}]
在这里,最外层的列表的父对象是第一个,第二个带extra的是子对象。
子对象的孩子,也就是extra,都是子对象的子对象,也就是孙子对象。
所以extra里面的对象全部都是孙子对象,而它们的父对象,就是extra本身元素所待的对象。
懂了吧?所以一个对象里的extra里的所有对象,其格式会照搬extra本身所在的对象。
只不过请注意一点:在你打指令之前,请你先注意一下extra本身所在的对象有没有内容元素,extra本身并不是内容元素!
这就是extra的用法。
但这并不代表本章结束了,你还记得第一百一十九章的这串指令吗:
/team modify 称号生存带师 br /refix [{“text“:“[lv.“,“color“:“red“},{“score“:{“name“:“*“,“objective“:“等级“}},{“text“:“]“,“color“:“red“},{“text“:“[生存带师]“,“color“:“red“}]
如果你真的去试了,你就会发现,实际上是这样的:
<[lv.][生存带师]lbwnb>谁有铁啊!!!我真的很缺铁哎!!!>
这是怎么回事呢?
因为score出错了。
score显示的分数只能是一个玩家的,所以score的name目标选择器不可以选中多个目标,或者是指定名称。
但是我们上面使用了*,这到底是干啥的呢?
你如果没跳过第一百二十二章的话,你就应该知道,*号的作用当时作者描述的是:显示自己的分数。
如果你语文比较好,注意力和观察力都是中偏高的,你就会发现上面这段描述有些问题:
显示谁自己的分数?
肯定是显示读者自己的分数。所以,*号并不能拥有多个读者,这样子它才不会逻辑混乱最后劳资不干了。
这时候问题就来了:怎样确定一个文本有没有多个读者呢?
我们常用的tellraw,格式相信你也知道,是这样的:
/tellraw <目标选择器><JSON文本>
在执行指令的时候,我们的游戏会先执行目标选择器,寻找符合的目标。
然后游戏会将JSON文本作为聊天消息分发给这些目标,然后再解析。这样子每个目标读到的JSON文本实际上都是独立的,自然就不会出现“一串文本有多个读者”的情况。
但如果是我们的队伍前后缀呢?可以发现设置的时候是没有目标选择器的,所以游戏并不会分发,而是直接公示,结果这就导致一串JSON文本会有很多读者,自然而然score就发挥不了作用了。
嗯,JSON的内容基本上就到这了,JSON的NBT我们放到下一卷讲NBT时再来讲。