开发人员从服务器接收JSON响应时的期望是什么?

时间:2014-07-02 08:28:32

标签: json

我有运行webservices的java库,它们以XML格式返回响应。 Web服务都围绕着提供有关项目的详细信息列表。最近,通过简单地将XML转换为JSON,允许服务返回JSON。在查看回复时,我发现它们并不像我想象的那么容易解析。例如,返回有关项目的详细信息的Web服务。

如果没有项目,则返回的JSON如下:

{"ItemResponse":""}

如果有1个项目,则响应如下(现在itemResponse将对象作为值而不是字符串):

{"ItemResponse":{"Items":{"Name":"Item1","Cost":"$5"}}}

如果有两个或多个项目,则响应为(现在项目的数组为值而不是对象):

{"ItemResponse":{"Items":[{"Name":"Item1","Cost":"$5"},{"Name":"Item2","Cost":"$3"}]}}

要解析这些,你需要几个我认为很笨的if / else。

如果答案是:

,这会有所改善吗?
  • 0项:[]
  • 1项:[{“姓名”:“第1项”,“费用”:“$ 5”}]
  • 2项:[{“名称”:“第1项”,“费用”:“5美元”},{“名称”:“第2项”,“费用”:“3美元”}]

这种方式总是有一个数组,它包含itemdata。可以使用额外的包装器对象:

  • 0项:{“项目”:[]}
  • 1项:{“Items”:[{“Name”:“Item1”,“Cost”:“$ 5”}}}
  • 2项:{“项目”:[{“姓名”:“第1项”,“费用”:“5美元”},{“名称”:“第2项”,“费用”:“3美元”}}} < / LI>

我没有JSON的经验,所以我的问题是,如果你是一个不得不使用这些web服务的开发人员,你会怎么期望JSON共鸣被格式化?是否总是返回一致的数组更好,即使没有项目或这通常不重要?或者是一个数组还不够,你真的期望在数组周围有一个包装器对象吗?

关于此的惯例/标准是什么?

2 个答案:

答案 0 :(得分:1)

不要切换结果类型,如果有更多项目,请始终返回数组。不要为1个项目混合一个对象以获得更多数组。那不是个好主意。

另一个最佳做法是您应该对API进行版本控制。使用类似yoursite.com/api/v1/endpoint的内容。如果您不这样做,则更改API的响应。您的所有客户端应用都将中断。因此,请记住这些文档。 (我在过去看到这种情况发生了很多......)

作为一名开发人员,我个人喜欢你的第二种方法,但这又是一种偏好。没有标准。

答案 1 :(得分:1)

使用json有几个原因:

  • 更加密集和紧凑:因此发送的数据更少
  • 在javascript中,您可以直接访问这些属性而无需解析任何内容。这意味着您可以将其转换为读取属性的对象(通常用于AJAX)
  • 同样在java中你通常不需要自己解析json - 有几个不错的库,比如www.json.org/java/index.html
  • 如果你需要知道如何构建json ...使用google ...有大量的信息。

对于您的实际问题:

然而,如果没有特定要求,是否值得从xml转换为json是个问题。正如迪特提到的:这取决于谁已经在使用这项服务以及如何消费......这意味着周围的环境非常重要。