客户机如何知道JSON Response的数据类型

客户机如何知道JSON Response的数据类型,json,xml,rest,delphi,xsd,Json,Xml,Rest,Delphi,Xsd,在使用现有的REST服务开发客户机应用程序时,我可以选择使用JSON或XML响应。XML响应由带有模式信息的XSD文件描述 通过这些XML模式,我可以确定某个结果必须是什么数据类型,客户机可以在向用户呈现数据时,或者在客户机要求用户更改属性时使用这些信息。(顺便说一句,如何退出是另一个问题,因为我找不到任何支持XSD模式的XML多平台Delphi实现……但正如我所说的:这是另一个问题) 另一种方法是使用JSON响应类型,但是客户端无法确定属性的特定数据类型,因为所有内容都是作为字符串发送的 客户

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

通过这些XML模式,我可以确定某个结果必须是什么数据类型,客户机可以在向用户呈现数据时,或者在客户机要求用户更改属性时使用这些信息。(顺便说一句,如何退出是另一个问题,因为我找不到任何支持XSD模式的XML多平台Delphi实现……但正如我所说的:这是另一个问题)

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

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

JSON没有XML那样的富类型系统,JSON没有XML那样的模式系统来描述枚举和引用。但是JSON只有很少的数据类型,JSON的一般格式是根据任何给定值使用的数据类型进行自我描述的(有关更多详细信息,请参阅官方文件):

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

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

    "fieldname": 12345
    
    "name": true
    
    "name": null
    
  • 对象始终用花括号括起来:

    "fieldname": { ... object data ... }
    
  • 数组始终用方括号括起来:

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

    "fieldname": 12345
    
    "name": true
    
    "name": null
    

  • 空值始终是固定的
    null
    ,不带引号:

    "fieldname": 12345
    
    "name": true
    
    "name": null
    

  • 除此之外的任何操作都需要客户机对正在发送的数据有外部知识(如XML中的模式,因为XML本身根本不描述数据类型)。

    JSON不像XML那样具有丰富的类型系统,JSON没有像XML那样的模式系统来描述枚举和引用。但是JSON只有很少的数据类型,JSON的一般格式是根据任何给定值使用的数据类型进行自我描述的(有关更多详细信息,请参阅官方文件):

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

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

    "fieldname": 12345
    
    "name": true
    
    "name": null
    
  • 对象始终用花括号括起来:

    "fieldname": { ... object data ... }
    
  • 数组始终用方括号括起来:

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

    "fieldname": 12345
    
    "name": true
    
    "name": null
    

  • 空值始终是固定的
    null
    ,不带引号:

    "fieldname": 12345
    
    "name": true
    
    "name": null
    
  • 除此之外,客户机还需要了解发送数据的外部信息(如XML中的模式,因为XML本身根本不描述数据类型)。

    应用程序应该知道“硬编码”信息的上下文。在不知道什么是HumptiDumpti的情况下,获得42是HumptiDumpti枚举的信息有什么好处?如果你得到答案,你应该知道问题和上下文。“硬编码”信息是你的应用程序应该知道的上下文。在不知道什么是HumptiDumpti的情况下,获得42是HumptiDumpti枚举的信息有什么好处?如果你得到了答案,你应该知道问题和上下文。