1

我想为基于 JSON 的协议正式定义一个模式。我对模式有两个标准: 1. 我希望能够使用工具来创建解析器/序列化器(php 和 .net)。2. 结果 JSON 应该易于人类阅读

这是上下文。该模式将描述一个游戏角色,作为一个例子,我将采用配置文件的一个方面 - 职业。一个角色最多可以拥有 2 个职业(从 10 个列表中),每个职业都由一个名称和一个级别来描述,例如:

剥皮 - 200 级 铁匠 - 300 级

为了满足标准#1,使用 XSD 模式(或 JSON 模式)来驱动代码生成器或解析器库确实很有帮助。但这意味着我的 JSON 必须类似于:

character : {
    professions : [ 
        { profession : "Skinning", level : 525 }
        { profession : "Blacksmith", level : 745 }
    ]
}

但是感觉太啰嗦了,我宁愿让 JSON 看起来像(注意使用职业作为键):

character {
    professions : {
        "Skinning" : 525,
        "Blacksmith" : 745 
    }
}

但是后面的 JSON 不能用 XSD 来描述,而不必为每个职业定义一个元素。

因此,我正在寻找适合我情况的解决方案,以下是我确定的选项:

  1. 闭嘴,让 JSON XSD 友好(上面的第一个片段)
  2. 闭嘴,让 JSON 人性化,手动编码解析器/序列化器。

但我真的很想找到一个同时满足这两个标准的解决方案。

注意:我知道 Newton-King 的 JSON 库可以让我将职业解析为字典 - 但它需要我手动编码类型以将此 JSON 映射到。因此,到目前为止,我倾向于选项#2,但我愿意接受建议。

4

2 回答 2

1

将职业重命名为名称,如下所示:

character : {
    professions : [ 
        { name : "Skinning", level : 525 }
        { name : "Blacksmith", level : 745 }
    ]
}

然后在客户端模型上序列化后会是这样的:

profession = character.professions[0]
profession.name
=> "Skinning"
于 2011-04-13T03:33:15.340 回答
0

正如您所说,您的选择是... 1 闭嘴并使用 xml 2 闭嘴并构建您自己的

或者也许 3... http://davidwalsh.name/json-validation

我会做 #1 - 因为 xml 似乎是从 X => Y 格式转换内容的一种相当常见的方式 - 我更喜欢使用 C# 而不是 JS - 许多人使用 XML,它是一个公认的标准,那里有很多资源一路帮助你

于 2011-04-13T16:09:32.833 回答