55

我希望编写一个提供 JSON 对象列表的 Web 服务。返回以下内容是否有效 JSON:

[
  {"keyA1":"valA", "keyB1":"valB"}
 ,{"keyA2":"valA", "keyB2":"valB"}
 ,{"keyA3":"valA", "keyB3":"valB"}
]

或者是将其放入单个对象中以返回的“正确”方法:

{"elements":[
   {"keyA1":"valA", "keyB1":"valB"}
  ,{"keyA2":"valA", "keyB2":"valB"}
  ,{"keyA3":"valA", "keyB3":"valB"}
]}
4

3 回答 3

73

两种形式都有效。但是,对于 API,我会推荐第二种形式。原因是它为您提供了扩展 API 的途径。

例如,如果您有一个getUsersInGroup返回用户对象数组的 API,然后您决定要包括一些关于返回的用户的汇总统计信息,那么在不破坏现有客户端(或包括每个用户对象中有大量冗余数据)。如果您使用一个对象,您只需向该对象添加另一个字段,该字段在 API 的早期版本中会被客户端静默忽略。

简而言之,尽量避免在您的 API 中使用顶级原语,您会发现将来扩展它更容易。

于 2013-10-27T20:53:19.893 回答
9

两者都是有效的 JSON,但第二种方式是正确的;将 JSON 作为数组传递可能会导致安全漏洞。请参阅有关 JSON 安全性的相关帖子以了解有关此内容的更多信息。在某些框架中,例如烧瓶,甚至有一些措施可以阻止您将 JSON 作为数组传递。

于 2013-10-27T20:52:49.500 回答
6

您可以使用http://jsonlint.com/验证 JSON

两者都是有效的 JSON 结果,但我会使用第二个。它更具逻辑性和描述性。

于 2013-10-27T20:49:08.960 回答