# 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在游戏内的应用