【问题标题】:How does a client know the datatype of JSON RestResponse客户端如何知道 JSON RestResponse 的数据类型
【发布时间】:2016-03-29 21:41:46
【问题描述】:

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

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

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

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

【问题讨论】:

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

标签: json xml rest delphi xsd


【解决方案1】:

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
    

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2019-12-13
    • 2017-01-12
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多