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标准的格式为:
"<名称>": <值>
值可以为一个数字(分为整数以及浮点数,浮点数即有小数),布尔值(只有 真(True)和假(False)的数值)等。
例如:
"Number":1
"Answer":true
对字符串(可以理解为普通文字)来说,值需要被双引号括起来,即:
"<名称>":"<值>"
例如:
"Name":"SYL"
如果是描述一个对象(Compound)的话,把内容(属性)书写在花括号{}
中,以,
分隔内容。
例如:
{"Name":"SYL","Gender":"Male"}
其中Name
和Gender
就是这个对象的属性。
这对象表达了名为SYL,性别为男的意思。
如果是一个集合/数组(Array/List),那么用[]
把对象括起来
例如:
{"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除错
JSON常见错误有几个:
- 标签名称忘记加上引号。如
{test:1}
是错的,{"test":1}
才是对的。 - 额外的逗号
,
。如[1,2,3,]
或{"test":1,"test2":2,}
。因为,
代表之后还有东西,记得之后没东西的时候要删掉那个逗号。 - 忘记转义。比如
"tellraw @a ["bla"]"
这可是错的,得转义成"tellraw @a [\"bla\"]"
。 - 括号不匹配。比如
{"a":{"test":"testing"}
,这个缺了最后的}
符号。
这个最好的办法是一开始就别错,而输入{
或[
符号时顺便输入}
或]
符号是一个好习惯。 - 错字,如
true
写成ture
。这样你就没救了(误。
JSON文本
在MC里面,目前用到JSON文本(Text component)的地方有5个,tellraw
命令,title
命令,告示牌
,成书
以及advancement
命令,用于记录文字的样式和功能。
比起传统的say
命令,JSON可以自由编辑样式,甚至提供了交互功能,所以很适合作为信息输出/用户交互界面。
其中最基本的概念是:
每一段文字被视作为一个文本对象,由{}
括起来。
文本对象内可设置属性,决定了文字的内容,样式,功能等等(内容只能设置一种,但可以设置多个其他属性)。
以下章节将一步步解释JSON文本的格式及在游戏内的应用。