# JSON概觀
## 簡介
什么是JSON?引用術語來說
> JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。 易于人閱讀和編寫。同時也易于機器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。 JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C, C++, C#, Java, JavaScript等)。 這些特性使JSON成為理想的數據交換語言
簡單來說
> JSON就是一種易于閱讀以及交換信息的語言格式
而Minecraft也看中了JSON這種便于閱讀及讀取的格式,以JSON格式來定義不同功能。
這里我們將會介紹JSON文本,這是一個經常用于各種命令的格式。
首先我們需要學習JSON的基本格式。
## 格式
首先,JSON標準的格式為
`"[名稱]": [值]`
值可以為一個數值,布爾值等
例如:
```
"Number":1
"Answer":true
```
對字符串來說,值需要被雙引號括起來,即
`"[名稱]":"[值]"`
例如:
```
"Name":"SYL"
```
---
如果是描述一個對象的話,把內容書寫在花括號`{}`中,以`,`分隔內容
例如:
```
{"Name":"SYL","Gender":"Male"}
```
這里表達了名為SYL,性別為男的意思
---
如果是一個集合/數組,那么用`[]`把對象括起來
例如:
```
{"CBL":[{"Name":"SYL","Gender":"Male"},{"Name":"Woody_Mo","Gender":"Male"}]}
```
這里描述了名為CBL的集合,包含了SYL和Woody_Mo這兩個對象
## 轉義
轉義是JSON應用中十分重要的課題。在此我們只會大約說明轉義的用法,詳細例子將會在之后章節給出例子。
當我們在字符串里使用某些特別的字符,如`"`字符的時候,情況會變得稍微復雜。舉個例子
```
"abc":"這個JSON的名稱為"abc""
```
就我們現在所學,`"`字符代表的是字串的開始和結尾啊!這樣的話哪個`"`字符是開始哪個才是結束?
答案是:沒人知道。我們不能這么寫JSON的。
> 如果我們要在字串里填寫一些特殊符號,我們需要對它們進行轉義(escape)
> 轉義即在**特殊字符前方**加入一個名為**轉義字符**的字符,表示這個字符和原來的意思不同。(當作普通字符處理)
> 在JSON里,轉義字符為`\`,而需要轉義的特殊字符為`\`及`"` (為何轉義字符也需要轉義?因為它獨自出現的時候代表的是轉義,而不是一個普通字符。因此當我們需要在文本內使用此字符時需要將其轉義。)
以上方的例子來說,我們希望abc的數值為`這個JSON的名稱為"abc"`,因此我們會這么寫:
```
"abc":"這個JSON的名稱為\"abc\""
```
如果我們要一個數值為上方這JSON字串的JSON呢?我們需要這么寫:
```
"foo":"\"abc\":\"這個JSON的名稱為\\\"abc\\\"\""
```
> 注意:
> 轉義本來是沒有"多重轉義"的概念的。轉義是一層一層,每次在`\`及`"`符號前方加入`\`字符。
> 記住這個最基本的原則可以避免出現錯誤
# JSON文本
在MC里面,目前用到JSON文本(Text component)的地方有5個,`/tellraw`,`/title`,`告示牌`,`成書`以及`advancement`,用于記錄文字的樣式和功能。
比起傳統的`/say`,JSON可以自由編輯樣式,甚至提供了交互功能,所以很適合作為信息輸出/用戶交互界面
其中最基本的概念是
每一段文字被視作為一個**對象**,由`{}`括起來
對象內可設置**屬性**,決定了文字的內容,樣式,功能等等
以下章節將一步步解釋JSON在游戲內的應用