JSON 模式到 PL/I 映射
DFHJS2LS 实用程序支持 JSON 模式和 PL/I 数据结构之间的映射。 由于 Enterprise PL/I 编译器与较早的 PL/I 编译器有所不同,因此支持以下两种语言选项:PLI-ENTERPRISE 和 PLI-OTHER。
将模式元素名称映射到 PL/I 的规则
- 将 A-Z , a-z , 0-9 , @ , # , _ 或 $以外的字符替换为 "
X'。例如,
monthly-total变为monthlyXtotal。您可以使用 MAPPING-OVERRIDES 参数来更改处理其他字符的方式。 例如,如果设置值 HYPHENS-AS-UNDERSCORES ,那么 JSON 模式中的任何连字符都将转换为下划线而不是 X。 例如,
monthly-total变为monthly_total。 - 将通过为第二个及后续名称实例添加一个或两个数字位来使同一范围内的重复名称唯一。
例如,三个
year实例变为year,year1和year2。如果不希望出现上述行为,那么用户可以将
MAPPING-OVERRIDES=NO-ARRAY-NAME-INDEXING指定为实用程序的输入,这将禁止将一个或两个数字数字添加到名称的第二个实例和后续实例中。 - JSON 模式指定变量具有不同的基数 (如果其
"type"值为"array") ,并且省略了关键字"minItems"和"maxItems"或具有不同的值。 如果此模式指定该变量具有可变基数,那么将使用"_cont"和"_num"后缀创建字段名称。有关更多信息,请参阅 DFHJS2LS。
- 如果变量未出现在与 JSON 模式
"object"类型相关的"required"关键字数组中,那么 JSON 模式指定该变量可选。 针对可选字段,会生成其他字段,且会向元素名称添加后缀_num。 在运行时,如果这为零,那么指示 JSON 数据中不存在该值,如果为非零,那么指示 JSON 数据中存在该值。 - 将字段名称限制在 31 个字符。 如果生成的名称(包含任何前缀和后缀)超出此长度,那么将截断此元素名称。
将模式类型映射到 PL/I 的规则
- 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且 CHAR-VARYING 参数设置为 NULL ,那么变长字符数据将映射到以 null 结束的字符串,并为 null 终止符分配额外的字符。
- 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且未指定 CHAR-VARYING 参数,那么缺省情况下,变长字符数据将映射到 Enterprise PL/I 的 VARYINGZ 数据类型和其他 PL/I 的 VARYING 数据类型。
- 可变长度二进制数据映射到 VARYING 数据类型 (如果它小于 32 768 字节) 和容器 (如果它超过 32 768 字节)。
| JSON 模式关键字 | PL/I 数据描述 |
|---|---|
所有以下项:
|
不支持 |
|
将忽略此关键字,但假定它符合草稿 04 JSON 模式规范。 |
|
将忽略这些关键字。 |
|
关键字 "format" 用于修改已生成的结构或运行时值。 请参阅以下信息,了解有关对 "format" 的受支持使用信息。 |
|
从映射级别 4.3 或更高版本支持多维数组,不支持混合类型数组。
如果同时存在 |
|
|
|
当前受支持的唯一 JSON 对象格式是命名元素的固定集合。 这将使用元素名称生成结构(或子结构)。 如果未在 ADDITIONAL-PROPERTIES-DEFAULT 参数中设置值,那么假定 如果 |
|
对象与上一个示例一样映射,具有支持其他属性的其他字段。 如果未在 ADDITIONAL-PROPERTIES-DEFAULT 参数中设置,那么假定 additionalProperties 属性为 false。如果启用此选项,那么将分配最多为 ADDITIONAL-PROPERTIES-MAX 参数中指定的值的空间。 每个空格中的字符数由 ADDITIONAL-PROPERTIES-SIZE 参数设置。 每个单独的属性都映射到一个 注: 可以通过多种方法在 CICS中配置 JSON 支持,包括使用 z/OS Connect for CICS。 如果您正在使用较旧的 CICS Java 管道技术,那么仅当
com.ibm.cics.json.enableAxis2Handlers JVM 系统属性未设置为 true 时,才支持 Additional Properties 。 |
|
这些关键字中没有任何一个受 JSON 对象支持。 |
|
其中 z 的值基于 m ,但取决于 CHAR-VARYING 参数的设置。 m 基于
|
|
当 CCSID=1200 处于映射级别 4.0 及更高版本时:
其中 z 的值基于 m ,但取决于 CHAR-VARYING 参数的设置。 m 基于 |
|
当 |
|
其中 m 基于 当 CCSID=1200 处于映射级别 4.0 及更高版本时:
其中 m 基于 |
|
其中 m 基于 |
|
其中 m 基于 |
|
当 CCSID=1200 处于映射级别 4.0 及更高版本时:
其中 m 基于 |
|
映射级别 1.1 和更低版本:
映射级别 1.2 及更高版本:
其中, |
|
将忽略
|
|
|
|
|
|
|
|
|
|
|
|
映射级别 1.1 和更低版本:
映射级别 1.2 及更高版本:
所有映射级别:
|
|
映射级别 1.1 和更低版本:
映射级别 1.2 及更高版本:
所有映射级别:
|
|
映射级别 1.1 和更低版本:
映射级别 1.2 及更高版本:
|
|
FIXED DECIMAL(
n
,
m
)
|
|
映射级别 1.0 和 1.1:
映射级别 1.2 及更高版本:
注: IBM® 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于浮点数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑将 DECIMAL FLOAT 数据类型的使用替换为固定精度替代方法。
|
|
映射级别 1.0 和 1.1:
映射级别 1.2 及更高版本:
注: IBM 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于浮点数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑将 DECIMAL FLOAT 数据类型的使用替换为固定精度替代方法。
|
|
通过选项数组的逻辑路径将合并在一起,就像定义了类型为 JSON 模式可以定义复杂逻辑结构; 但是,在到语言结构的映射中,复杂逻辑结构中隐含的微妙关系可能会丢失。 变换过程不会尝试从模式强制实施组合规则; 它仅与指示给定 JSON 属性是存在还是不存在的语言结构字段进行交互。 如果子选项包含相同属性名的兼容定义,那么 DFHJS2LS 会尝试合并关联的约束模式,但在此过程中可能会丢失某些子项。 例如,假定以下定义:
"A" 定义为长度最多为 5 个字符的字符串或长度在 7 到 8 个字符之间的字符串。 合并的组合可能会导致映射到长度介于 0 和 8 个字符之间的字符串,而不会识别 6 个字符的长度无效。大多数涉及逻辑组合的场景将映射到简单的语言结构,但复杂的逻辑组合可能会在映射过程中导致妥协。 为了获得最佳结果,请避免在 JSON 模式中使用逻辑组合来定义同一 JSON 属性的备用声明。 |