理解JSON
TIP
这是附录页面。您可以从头开始阅读指南这里。
JSON是一种简单的文本文件格式,人类和计算机都能理解。基岩版使用.json文件作为附加组件的"语言",因此您需要扎实掌握如何读写JSON!如果您从未接触过JSON,建议您阅读这篇教程。它将教会您编写有效JSON文件所需的一切知识。
有效的JSON
编写JSON时最重要的是必须_完全无错误_,否则整个文件都将失效。即使是一个错误的字符或多余逗号也会导致整个文件失败。因此,编写有效的JSON至关重要。
我们可以使用名为json lint的在线工具来验证JSON是否有效。只需将代码粘贴到网站中,然后点击Validate JSON。您将获得一个响应,指示代码是否正确,以及任何错误的位置和类型。
数据结构
在JSON中,数据可以用多种格式编写。每种格式都专用于表示特定类型的数据。以下是可用的结构:
| 名称 | 示例 | 说明 |
|---|---|---|
| 字符串 | "你好!" | 单词或字符。需要引号。 |
| 整数 | 15 | 数字。不需要引号。 |
| 浮点数 | 1.2 | 小数。不需要引号。 |
| 布尔值 | true | 只能是true或false。不需要引号。 |
以.json格式表示:
{
"my_string": "hello!",
"my_int": 15,
"my_float": 1.2,
"my_bool": true
}除了这些简单结构外,我们还可以使用两种特殊结构。特殊结构用于_嵌套_其他数据。
数组
数组用两个方括号[]表示。它们代表一个_列表_。我们可以在列表中放入_其他数据结构_。列表中的每个_元素_应该用逗号分隔。
一些示例:
| 结构 | 说明 |
|---|---|
| [1, 2, 3] | 整数列表。 |
| ["红", "蓝"] | 字符串列表。注意引号! |
以.json格式表示:
{
"my_ints": [1, 2, 3],
"my_strings": ["Red", "blue"]
}对象
对象用两个花括号{}表示。对象是一种特殊语法,包含_命名的_数据结构。名称称为键,结构称为值。本页前面的示例是一个_字典_,包含其他数据类型的示例。
这种键值语法如下:"<键>": <任何结构>。注意键周围的引号和冒号。
以下是一个对象的示例,其中包含几个_键值对_。
{
"a_list_of_integers": [1, 2, 3],
"is_json_cool": true
}我们需要用逗号分隔每个键值对。
我们将对象的键值对称为其_子项_或_内部_项。
JSON结构
在Minecraft中,JSON文件总是以一个_对象_开头,您可以记住这是两个花括号:{}。我们称之为_顶层对象_。我们以键值对的形式在这个对象_内部_编写代码。
以下是一个简单的JSON文件示例,用于Minecraft附加组件:
{
"format_version": "1.12.0",
"animations": {
"animation.car.wheel_spin": {
"loop": true,
"animation_length": 1.0,
"bones": {
"front_wheels": {
"rotation": ["q.modified_distance_moved * -30", 0, 0]
},
"back_wheels": {
"rotation": ["q.modified_distance_moved * -30", 0, 0]
}
}
}
}
}仔细看看这个格式。您会发现整个结构都是由我们已经学过的数据结构构建的。如果您想练习JSON技能,试着回答以下问题:
- _顶层对象_中有多少个键?您能说出它们的名字吗?
format_version的值是什么?"loop"键中存储的是什么类型的数据?(字符串、布尔值等)
故障排除示例
以下是一些示例,帮助您理解在Discord或在线可能收到的反馈。我们在讨论JSON错误时倾向于使用技术术语,希望本节能帮助您熟悉这些术语:
您写了:"format_version": 1.12
他们说:"format_version的值类型错误。它应该是一个字符串。"
记住,类型指的是以下结构之一:字符串、整数、浮点数、数组或对象。如果我们检查代码,会发现我们将format_version设置为浮点数,而不是字符串。我们可以通过给"1.12"加上引号来解决这个问题。
您写了:[1 2 5 6]
他们说:"您的数组缺少逗号。"
记住,数组元素需要用逗号分隔。您的数组应该像这样:[1, 2, 5, 6]
他们说:"您不小心将格式版本放在了描述内部。它应该放在外部的顶层。"
这意味着"format_version"的键值对是描述的_子项_。您应该将键值对从描述对象中复制/粘贴出来,并将其放在顶层。






