我希望编写一个提供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"}
]}
答案 0 :(得分:39)
两种表格都有效。但是,对于API,我建议使用第二种形式。原因是它为您提供了扩展API的途径。
例如,如果您有一个返回用户对象数组的API getUsersInGroup
,以后您决定要包含一些关于返回用户的聚合统计信息,那么就没有简单的方法可做不破坏现有客户端(或在每个用户对象中包含大量冗余数据)。如果您使用对象,则只需向该对象添加另一个字段,该字段在以前版本的API上被客户端静默忽略。
简而言之,尽量避免在API中尽可能避免使用顶级基元,并且您将来会发现它更容易扩展。
答案 1 :(得分:6)
两者都是有效的JSON,但第二种方式是正确的;作为一个数组传递JSON可能会导致安全漏洞。请参阅有关JSON安全性的related post以了解有关此内容的更多信息。在某些框架中,例如flask,甚至有一些措施阻止您将JSON作为数组传递。
答案 2 :(得分:5)
您可以使用http://jsonlint.com/
来验证JSON两者都是有效的JSON结果,但我会使用第二个。它更具逻辑性和描述性。