我想使用 JSON 存储树数据,但我不知道如何很好地表达类型。
下面是一个涉及猫和老鼠的假设游戏的 XML 的样子:
<level>
<entities>
<cat>
<direction>right</direction>
<position x="100" y="100"/>
</cat>
<mouse>
<direction>right</direction>
<position x="50" y="50"/>
</mouse>
</entities>
</level>
我能想到的最好的 JSON 如下:
{
"entities": [
{
"type": "cat",
"direction": "right",
"position": {"x": 100, "y": 100}
},
{
"type": "mouse",
"direction": "right",
"position": {"x": 50, "y": 50}
}
]
}
这里我明确指定类型。似乎 XML 更适合这个,但不幸的是,我不能真正使用它,所以我想知道是否有更好的方法来使用 JSON。
受 Lua 的表构造函数的启发,我想出了以下内容,这显然不是 JSON,但 JS 在我的情况下实际上很好(这些数据不打算传输,它只是用于对象树):
{
"entities": [
cat({
"direction": "right",
"position": {"x": 100, "y": 100}
}),
mouse({
"direction": "right",
"position": {"x": 50, "y": 50}
})
]
};
但是,就像在 Lua 中一样,缺点是我实际上必须在某处将所有可能的实体定义为函数:
function cat(options) {
options.type = "cat";
return options;
}
function mouse(options) {
options.type = "mouse";
return options;
}
您认为,在 JSON 中表达类型是否有比使用属性更好的方法?我的hack走得太远了吗?