客户端如何知道JSON RestResponse的数据类型

时间:2016-03-29 21:41:46

标签: json xml rest delphi xsd

在使用我们现有的REST服务开发客户端应用程序时,我可以选择使用JSON或XML响应。 XML响应由具有架构信息的XSD文件描述。

使用这些XML Schema,我可以确定某个结果必须是什么数据类型,并且客户端可以在向用户呈现数据时使用该信息,或者客户端要求用户更改属性时使用该信息。 (如何解决另一个问题,因为我找不到任何支持XSD架构的XML的多平台Delphi实现......但就像我说的那样:那是另一个问题。)

另一种方法是使用JSON响应类型,但客户端无法确定属性的特定数据类型,因为所有内容都以字符串形式发送。

客户端如何知道其中一个属性是枚举类型的索引,或整数,或者ID的数量或对另一个对象的引用可能? (这些只是例子) 我认为客户端不应该包含关于响应结构的“硬编码”信息,或者假设我错了?

1 个答案:

答案 0 :(得分:3)

JSON没有像XML那样的丰富类型系统,JSON没有用于描述枚举和XML之类的引用之类的模式系统。但是JSON只有几种数据类型,并且JSON的一般格式是根据任何给定值使用的数据类型自我描述(有关更多详细信息,请参阅官方JSON spec):

  1. 字符串始终用引号括起来:

    "fieldname": "fieldvalue"
    
  2. 数值是不带引号的数字字符:

    "fieldname": 12345
    
  3. 一个对象总是用花括号括起来:

    "fieldname": { ... object data ... }
    
  4. 数组总是用方括号包裹:

    "fieldname": [ ... array data ... ]
    
  5. 布尔值始终是固定的truefalse,不带引号:

    "name": true
    

    "name": false
    
  6. null始终是固定的null,不带引号:

    "name": null
    
  7. 除此之外的任何事情都要求客户端具有正在发送的数据的外部知识(如XML中的模式,因为XML本身根本不描述数据类型)。