在使用我们现有的REST服务开发客户端应用程序时,我可以选择使用JSON或XML响应。 XML响应由具有架构信息的XSD文件描述。
使用这些XML Schema,我可以确定某个结果必须是什么数据类型,并且客户端可以在向用户呈现数据时使用该信息,或者客户端要求用户更改属性时使用该信息。 (如何解决另一个问题,因为我找不到任何支持XSD架构的XML的多平台Delphi实现......但就像我说的那样:那是另一个问题。)
另一种方法是使用JSON响应类型,但客户端无法确定属性的特定数据类型,因为所有内容都以字符串形式发送。
客户端如何知道其中一个属性是枚举类型的索引,或整数,或者ID的数量或对另一个对象的引用可能? (这些只是例子) 我认为客户端不应该包含关于响应结构的“硬编码”信息,或者假设我错了?
答案 0 :(得分:3)
JSON没有像XML那样的丰富类型系统,JSON没有用于描述枚举和XML之类的引用之类的模式系统。但是JSON只有几种数据类型,并且JSON的一般格式是根据任何给定值使用的数据类型自我描述(有关更多详细信息,请参阅官方JSON spec):
字符串始终用引号括起来:
"fieldname": "fieldvalue"
数值是不带引号的数字字符:
"fieldname": 12345
一个对象总是用花括号括起来:
"fieldname": { ... object data ... }
数组总是用方括号包裹:
"fieldname": [ ... array data ... ]
布尔值始终是固定的true
或false
,不带引号:
"name": true
"name": false
null始终是固定的null
,不带引号:
"name": null
除此之外的任何事情都要求客户端具有正在发送的数据的外部知识(如XML中的模式,因为XML本身根本不描述数据类型)。