我有运行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。
如果答案是:
,这会有所改善吗?这种方式总是有一个数组,它包含itemdata。可以使用额外的包装器对象:
我没有JSON的经验,所以我的问题是,如果你是一个不得不使用这些web服务的开发人员,你会怎么期望JSON共鸣被格式化?是否总是返回一致的数组更好,即使没有项目或这通常不重要?或者是一个数组还不够,你真的期望在数组周围有一个包装器对象吗?
关于此的惯例/标准是什么?
答案 0 :(得分:1)
不要切换结果类型,如果有更多项目,请始终返回数组。不要为1个项目混合一个对象以获得更多数组。那不是个好主意。
另一个最佳做法是您应该对API进行版本控制。使用类似yoursite.com/api/v1/endpoint
的内容。如果您不这样做,则更改API的响应。您的所有客户端应用都将中断。因此,请记住这些文档。 (我在过去看到这种情况发生了很多......)
作为一名开发人员,我个人喜欢你的第二种方法,但这又是一种偏好。没有标准。
答案 1 :(得分:1)
使用json有几个原因:
对于您的实际问题:
然而,如果没有特定要求,是否值得从xml转换为json是个问题。正如迪特提到的:这取决于谁已经在使用这项服务以及如何消费......这意味着周围的环境非常重要。