小程序 json 转换

    技术2024-04-06  95

    基本条款
    JSON :基于文本的开放标准,旨在传输结构化数据。 JSON最常用于在Web应用程序和Web服务器之间传输数据。 JSON有效负载 :REST API的POST或PUT请求的JSON格式的主体。 JSON模式 :描述要应用于JSON有效负载的验证和转换规则。

    本文提出了一种解决方案体系结构,该体系结构解决了云服务及其使用者之间的交互需要验证和转换JavaScript对象表示法(JSON)有效负载时可能发生的问题。 该架构(我们称为JVAX(JSON验证和转换/转换))使用可配置的JSON模式进行验证和转换。

    具有JSON有效负载的云应用程序的开发生命周期通常涉及持续的升级和集成。 每个用例的添加或修改都可能需要更改应用程序的JSON验证和转换逻辑。 结果,应用程序可能变得越来越脆弱且容易出错,并且维护起来很麻烦。

    通常,提供代表性状态转移(REST)API的云服务会完成验证和转换JSON有效负载的大量工作。 JVAX体系结构旨在独立于云服务验证和转换JSON有效负载。 结果,JVAX系统减少了服务提供商必须执行的请求验证处理量。 同时,JVAX还有助于使使用它的应用程序更可靠和可维护。

    JVAX使用复杂的机制来描述有效负载规则。 为了向您介绍JVAX构造,让我们从一个示例开始。

    JVAX模式定义

    清单1显示了一个简单的JSON有效负载: Person对象。

    清单1. Person对象的样本输入数据
    "Person": { "FirstName" : "Krishna", "LastName" : "Yadav" "Age" : 25, "PhoneNumber" : "91-012-3456789" }

    清单2显示了清单1的Person对象的JSON模式的基本示例:

    清单2. JVAX中Person对象的模式定义
    { "Person" : { "type" : "object", "properties" : { "FirstName" : { "type" : "string", "category" : "MANDATORY" }, "LastName" : { "type" : "string", "category" : "MANDATORY" }, "Age" : { "type" : "number", "category" : "MANDATORY" }, "PhoneNumber" : { "type" : "string", "category" : "OPTIONAL" } } }}

    清单2中的JSON模式根据各种数据类型描述了Person对象的字段。 表1列出了JVAX支持的类型:

    表1.支持的JVAX字段类型
    支持的类型 输入值 例 string java.lang.String支持的双引号字符串值 "type" : "string" boolean true还是false "type" : "boolean" object 键/值对的有序集合。 properties说明符包含这些键/值对的描述。 "type" : "object", "properties" : { // description of the collection } array 值的有序序列(可以是基本类型或其他对象类型)。 假定所有元素都是同一类型。 items说明符包含数组的描述。 "type" :"array","items" : { // description of array elements } number java.lang.number支持的数字值 "type" : "number"

    有效负载中的每个字段都需要一个值。 对于每个字段,架构都应用一个category 。 类别使用内部规则(在应用程序代码的业务逻辑中实现)确定JVAX如何处理字段的值。 规则支持一种覆盖值的方法,这对于防止调用方设置无效值特别重要。 表1显示了JVAX类别及其相关的处理规则:

    表2. JVAX类别和相关的处理规则
    类别 说明(针对API使用者) 内部处理规则(是=输入中提供)(否=输入中未提供) MANDATORY API请求必须提供值。 如果是,请使用该值。 如果否,则发生错误。 OPTIONAL API请求可以选择提供值。 如果未提供值,则使用默认值。 如果是,请使用该值。 如果没有,则在架构中提供默认值,然后使用它。 如果否,并且架构中未提供默认值,则不执行任何操作。 RESERVED 这些字段仅用于内部目的。 任何API请求输入值都将被忽略,并用架构中的内部默认值替换。 如果是,请使用默认值覆盖。 如果否,则创建并填充默认值。 (在两种情况下都不会发生错误。) SUPPRESSED 如果提供,将忽略值。 如果是,则删除。 如果否,则不执行任何操作。

    该模式还支持使用枚举,正则表达式和自定义验证机制。 并且由于架构可以引用共享对象定义,因此JVAX促进了代码重用。

    JVAX设计

    JVAX设计中的关键概念是请求在服务提供商处理请求之前先通过JVAX系统。 图1显示了JVAX组件及其相互关系的概述:

    图1. JVAX概述

    图1中反映的基本步骤是:

    在JVAX系统上,服务提供者定义一个JSON模式,该模式用作API有效负载的模板。 使用者使用API​​将JSON有效负载发送到JVAX系统。 JVAX根据模式验证并转换输入有效负载。 当出现错误情况时,JVAX代表提供者响应使用者。 验证成功后,JVAX会将请求重定向到服务提供商。

    设计JSON模式

    定义JSON模式的过程包括:

    服务提供商定义API和关联的有效负载字段。 服务提供者定义了一个JSON模式,该模式反映了API有效负载的字段。 服务提供者使用以下规则定义字段的数据类型: 如果API需要一个字段,则服务提供商将其标记为MANDATORY 。 如果不需要该字段,则将其标记为OPTIONAL 。 应始终具有一组特定值的字段被标记为RESERVED 。 如果不应将字段的值传递给API,则将该字段标记为SUPPRESSED 。

    图2显示了JSON模式设计涉及的总体步骤:

    图2.设计JSON模式的步骤

    JVAX入职流程

    图3显示了JVAX系统的入门过程:

    图3. JVAX的入职流程

    在图3所示的过程中:

    JVAX系统读取服务使用者提供的JSON有效负载。 JVAX读取服务提供者为特定API提供的JSON模式。 JVAX尝试验证JSON模式。 如果遇到错误,它将返回错误条件并停止。 如果该模式有效,则JVAX会根据定义的JSON模式验证JSON有效负载。 如果有效负载与JSON模式的签名不匹配,它将返回错误条件并停止。 如果有效负载验证中没有发生错误,则JVAX(可选)根据API要求转换输入的JSON有效负载。 服务提供者基础框架调用API并将其用于将响应发送给服务使用者。

    配置选项

    整个JVAX系统可以配置为独立或嵌入式。 在独立配置中,JVAX与云服务分开安装,并作为单独的进程运行。 在嵌入式配置中,JVAX嵌入在现有应用程序中,因此共享相同的处理空间。 嵌入式配置使JVAX易于部署和配置。 它还避免了不必要的硬件配置成本。

    JVAX的优势

    JVAX解决方案体系结构的优点是:

    易于配置:JVAX的基于规则的方法使实施可能经常更改的业务规则更加容易。 可插拔性和可扩展性:JVAX基于规则的方法可以嵌入到实际服务或任何其他现有代理中。 或者,可以将其添加为拦截和检查有效负载的独立代理。 易于维护:只需更改配置,而无需重新部署服务本身。 效率:除非请求有效,否则请求不会到达API,从而减少了服务提供商的不必要处理开销。 版本支持:即使服务提供商可以更改系统的内部结构,JVAX也提供了一种维护外部接口兼容性的简便方法。 文档支持:模式信息可以直接转换为API文档。

    结论

    JSON被广泛用于在客户端应用程序和Web服务器之间传输数据,这使得JSON验证和转换在云时代变得越来越重要。 JAVX系统可以为服务提供商和服务使用者带来福音。 它的可配置性可帮助服务提供商减少处理JSON格式的各种有效负载所涉及的维护工作。 服务使用者可以轻松地查看JVAX系统的响应,并相应地修改其JSON有效负载。


    翻译自: https://www.ibm.com/developerworks/cloud/library/cl-json-verification/index.html

    相关资源:jdk-8u281-windows-x64.exe
    Processed: 0.010, SQL: 9