JSON模式:允许在密钥中存储信息

时间:2011-04-13 02:37:44

标签: json jsonschema

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

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

剥皮 - 等级200 铁匠 - 等级300

为了满足标准#1,使用XSD架构(或JSON Schema)来驱动代码生成器或解析器库真的很有帮助。但这意味着我的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人性化并手动编写解析器/序列化程序。
  3. 但我真的想找到一个能满足这两个标准的解决方案。

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

2 个答案:

答案 0 :(得分:1)

将专业重命名为如此:

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

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

profession = character.professions[0]
profession.name
=> "Skinning"

答案 1 :(得分:0)

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

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

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