为什么collection + json使用匿名对象而不是键值对

时间:2013-07-03 09:13:10

标签: schema collection-json

我正在尝试找到一个可以用于不同场景的数据模式,我发现到目前为止我发现的一种promissing格式是集合+ json格式(http://amundsen.com/media-types/collection/)。

到目前为止,它有很多我需要的功能,并且非常灵活,但我不明白为什么它使用匿名对象(例如:{"name" : "full-name", "value" : "J. Doe", "prompt" : "Full Name"},)而不是简单的键值对。 (例如:“全名”:“J。Doe”,)。

我看到你如何能够传递更多信息,比如提示等等,但解析速度要慢得多,因为他必须通过搜索数组来访问字段,因此很难为它创建客户端。将数据绑定到特定视图时,必须知道哪些字段存在,因此必须再次将匿名对象转换为键值映射。

那么使用这个匿名对象而不是键值映射有没有真正的优势?

2 个答案:

答案 0 :(得分:2)

我认为主要原因是因为消费者客户不需要事先知道数据的格式。

正如现在在集合+ json中提出的那样,你知道在数据对象中你只需通过解析就能找到关于数据的东西,'name'始终是字段的识别名称,'value'是值等等,您的客户可以不知道有多少字段或名称:

{
 "name" : "full-name", 
 "value" : "J. Doe", 
 "prompt" : "Full Name"
},
{
 "name" : "age", 
 "value" : "42", 
 "prompt" : "Age"
}

如果您改为

{
 "full-name" : "J. Doe", 
 "age" : "42"
}

客户需要具有关于您的表示的先前知识,因此它应该期望并理解“全名”,“年龄”以及所有特定于应用程序的字段。

答案 1 :(得分:0)

我写了这个问题然后原谅了它,但找到了我在这里寻找的答案:

  

https://groups.google.com/forum/#!searchin/collectionjson/key/collectionjson/_xaXs2Q7N_0/GQkg2mvPjqMJ

集合+ JSON的创建者Mike Amundsen

  

我理解您希望将对象序列化模式添加到CJ。   但是,我的CJ设计的主要目标之一是支持   对象序列化。我知道序列化是经常要求的   Web消息的功能。这是优化代码的好方法   和程序员的经验。但这不是我的目标   在这个特殊的设计中。

     

我认为扩展Kevin ref'd是一个不错的选择。不确定是否有人   这真的是用它了。如果您想设计一个(基于您的   “身体”的想法),这很酷。如果你想开始用一个要点而不是   做整个“拉”的事情,这很酷。发布它,让我们谈谈   关于它。

     

另一方面,我为CJ编写了一个非常基本的客户端解析器   (它在repo的基本文件夹中)显示如何隐藏   干净利落地驾驶CJ国家模型的“昂贵”部分。其实我   有一个工作项来创建一个可以转换的客户端库   状态表示为任意本地对象模型,但没有   有时间做这项工作。也许这是你想要的帮助   跟我?

     

在更深层次(可能更无聊)的层面上,这个状态模型   方法是我在处理消息时所考虑的更大模式的一部分   作为“无类型”容器并允许客户端和服务器使用   他们喜欢的任何本地对象模型 - 无需使用   该对象模型的跨Web协议。这是一个“自以为是的人   设计模型“我正在努力。

     

最后,你正确地指出了线程的顶部,HAL和   Siren能够更好地支持对象序列化风格   消息。我觉得这很酷,我鼓励人们(包括我的   客户端)在对象序列化时使用这些其他格式   首选模式,并在首选状态转移时使用CJ   图案。