第一百二十七章 JSON剩下の一些東西
我們知道,在JSON里,對(duì)象有分為父對(duì)象和子對(duì)象,第一個(gè)對(duì)象肯定是接下來的對(duì)象的父對(duì)象。
只不過這種父對(duì)象子對(duì)象一般只會(huì)在[]這種JSON列表里才會(huì)遇到,{}里一般用不到。
如果{}里也要分父對(duì)象和子對(duì)象呢?那就要使用“extra”元素了,這位元兄已經(jīng)在之前出過很多次場(chǎng)了。
extra是這么用的:
{“內(nèi)容元素“:“一些內(nèi)容“,“extra“:[{},{}......]}
沒錯(cuò),使用extra,就可以在一個(gè)對(duì)象里再放入許許多多的對(duì)象。只不過這時(shí)候你可能會(huì)問:唉那extra里面的這些對(duì)象的父對(duì)象到底是哪個(gè)對(duì)象呢?
很簡(jiǎn)單,我們可以拿JSON的列表說話:
[““,{“內(nèi)容元素“:“一些內(nèi)容“,“extra“:[{},{}......]}]
在這里,最外層的列表的父對(duì)象是第一個(gè),第二個(gè)帶extra的是子對(duì)象。
子對(duì)象的孩子,也就是extra,都是子對(duì)象的子對(duì)象,也就是孫子對(duì)象。
所以extra里面的對(duì)象全部都是孫子對(duì)象,而它們的父對(duì)象,就是extra本身元素所待的對(duì)象。
懂了吧?所以一個(gè)對(duì)象里的extra里的所有對(duì)象,其格式會(huì)照搬extra本身所在的對(duì)象。
只不過請(qǐng)注意一點(diǎn):在你打指令之前,請(qǐng)你先注意一下extra本身所在的對(duì)象有沒有內(nèi)容元素,extra本身并不是內(nèi)容元素!
這就是extra的用法。
但這并不代表本章結(jié)束了,你還記得第一百一十九章的這串指令嗎:
/team modify 稱號(hào)生存帶師 prefix [{“text“:“[lv.“,“color“:“red“},{“score“:{“name“:“*“,“objective“:“等級(jí)“}},{“text“:“]“,“color“:“red“},{“text“:“[生存帶師]“,“color“:“red“}]
如果你真的去試了,你就會(huì)發(fā)現(xiàn),實(shí)際上是這樣的:
<[lv.][生存帶師]lbwnb>誰有鐵?。。?!我真的很缺鐵哎?。?!>
這是怎么回事呢?
因?yàn)閟core出錯(cuò)了。
score顯示的分?jǐn)?shù)只能是一個(gè)玩家的,所以score的name目標(biāo)選擇器不可以選中多個(gè)目標(biāo),或者是指定名稱。
但是我們上面使用了*,這到底是干啥的呢?
你如果沒跳過第一百二十二章的話,你就應(yīng)該知道,*號(hào)的作用當(dāng)時(shí)作者描述的是:顯示自己的分?jǐn)?shù)。
如果你語文比較好,注意力和觀察力都是中偏高的,你就會(huì)發(fā)現(xiàn)上面這段描述有些問題:
顯示誰自己的分?jǐn)?shù)?
肯定是顯示讀者自己的分?jǐn)?shù)。所以,*號(hào)并不能擁有多個(gè)讀者,這樣子它才不會(huì)邏輯混亂最后勞資不干了。
這時(shí)候問題就來了:怎樣確定一個(gè)文本有沒有多個(gè)讀者呢?
我們常用的tellraw,格式相信你也知道,是這樣的:
/tellraw <目標(biāo)選擇器><JSON文本>
在執(zhí)行指令的時(shí)候,我們的游戲會(huì)先執(zhí)行目標(biāo)選擇器,尋找符合的目標(biāo)。
然后游戲會(huì)將JSON文本作為聊天消息分發(fā)給這些目標(biāo),然后再解析。這樣子每個(gè)目標(biāo)讀到的JSON文本實(shí)際上都是獨(dú)立的,自然就不會(huì)出現(xiàn)“一串文本有多個(gè)讀者”的情況。
但如果是我們的隊(duì)伍前后綴呢?可以發(fā)現(xiàn)設(shè)置的時(shí)候是沒有目標(biāo)選擇器的,所以游戲并不會(huì)分發(fā),而是直接公示,結(jié)果這就導(dǎo)致一串JSON文本會(huì)有很多讀者,自然而然score就發(fā)揮不了作用了。
嗯,JSON的內(nèi)容基本上就到這了,JSON的NBT我們放到下一卷講NBT時(shí)再來講。