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"}

其中NameGender就是这个对象的属性
这对象表达了名为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文本的格式及在游戏内的应用。

results matching ""

    No results matching ""