如何格式化JSON响应?

时间:2012-01-20 13:27:32

标签: json rest

我有一个REST服务,它返回一个对象列表。每个对象都包含objectcodeobjectname

这是我第一次构建REST服务,因此我不确定如何格式化响应。

应该是:

{
    "objects": {
        "count": 2,
        "object": [
            {
                "objectcode": "1",
                "objectname": "foo"
            },
            {
                "objectcode": "2",
                "objectname": "bar"
            },
            ...more objects
        ]
    }
}

OR

 [
    {
        "objectcode": "1",
        "objectname": "foo"
    },
    {
        "objectcode": "2",
        "objectname": "bar"
    },
    ...more objects
]

我意识到这可能有点主观,但更容易消费?我还需要稍后支持XML格式的响应。

4 个答案:

答案 0 :(得分:3)

它们是相同的消耗,因为库处理两者都很好。第一个优先于第二个优势:您将能够扩展响应以包含对象之外的其他信息(例如,类别),而不会破坏现有代码。

这样的东西
{
    "objects": {
        "count": 2,
        "object": [
            {
                "objectcode": "1",
                "objectname": "foo"
            },
            {
                "objectcode": "2",
                "objectname": "bar"
            },
            ...more objects
        ]
    }

 "categories": {
  "count": 2,
  "category" : [
     { "name": "some category"}
  ]
  }
}

此外,不应该以任何方式格式化json,因此删除空格,换行符等。此外,计数不是必需的,因为它将在解析对象本身时保存。

答案 1 :(得分:2)

我经常看到第一个。有时,操纵数据以获取元数据更容易。例如,谷歌API使用第一个:http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true

答案 2 :(得分:1)

这不仅仅是个人偏好的问题;这也是你的要求的问题。例如,如果我处于相同的情况并且我确实需要在客户端进行对象计数,那么我将采用第一种方法,否则我将选择第二种方法。

另请注意,“经典”REST服务器的工作方式大多不同。如果某个REST函数要返回一个对象列表,那么它应该只返回那些对象的 URL 列表。 URL应指向详细信息端点 - 因此,通过查询每个端点,您可以获得有关特定单个对象的详细信息。

答案 3 :(得分:-1)

作为客户,我更喜欢第二种格式。如果第一种格式只包含"对象"的数量,则这是多余的信息。