PL/I 到 JSON 模式映射
DFHLS2JS 实用程序支持 PL/I 数据结构与 JSON 模式定义之间的映射。 由于 Enterprise PL/I 编译器与较早的 PL/I 编译器有所不同,因此支持以下两种语言选项:PLI-ENTERPRISE 和 PLI-OTHER。
按照以下规则将 PL/I 名称转换为 JSON 名称:
- 在 JSON 属性名称中无效的字符将替换为 "
x'。例如,
monthly$total将变为monthlyxtotal。 - 将通过添加一个或多个数字位来使重复的名称唯一。
例如,两个
year实例将变为year和year1。
DFHLS2JS 根据下表将 PL/I 数据类型映射到模式元素。 DFHLS2JS不支持表中未显示的 PL/I 类型。 同时适用以下限制:
- 不支持具有 COMPLEX 属性的数据项。
- 在映射级别 1.2 或更高级别上支持具有 FLOAT 属性的数据项。 不支持 Enterprise PL/I FLOAT IEEE。
- 在映射级别 1.2 或更高级别上支持 VARYING 和 VARYINGZ 纯 DBCS 字符串。
- 指定为 DECIMAL ( p , q ) 的数据项 仅当 p ≥ q 时才受支持
- 指定为 BINARY ( p , q ) 的数据项 仅当 q = 0 时才受支持。
- 如果为数据项指定了 PRECISION 属性,那么将忽略该属性。
- 不支持 PICTURE 字符串。
- 将 ORDINAL 数据项视为 FIXED BINARY(7) 数据类型。
- 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且 CHAR-VARYING 参数设置为 NULL ,那么字符数组将映射到
string并作为以 null 结束的字符串进行处理; 此映射不适用于 Enterprise PL/I。 - 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且 CHAR-VARYING 参数设置为 BINARY ,那么字符数组将映射到
string并作为二进制数据进行处理。 - 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且 CHAR-VARYING 参数设置为折叠,那么将除去前导空格和尾部空格,并将多个空格替换为单个空格。
DFHLS2JS 未完全实现 PL/I 的填充算法; 因此,必须在数据结构中显式声明填充字节。 如果 DFHLS2JS 检测到缺少填充字节,那么将发出一条消息。 每个顶级结构必须在双字边界上开始,并且结构中的每个字节必须映射到正确的边界。 请考虑以下代码片段:
3 FIELD1 FIXED BINARY(7),
3 FIELD2 FIXED BINARY(31),
3 FIELD3 FIXED BINARY(63);在本示例中:- FIELD1 为 1 个字节长度,可以在任何边界上对齐。
- FIELD2 为 4 个字节长度,必须在全字边界上对齐。
- FIELD3 为 8 个字节长度,必须在双字边界上对齐。
- 首先对齐 FIELD3,这是因为它具有最强烈的的边界需求。
- 在 FIELD3 之前紧接着将 FIELD2 在全字边界处对齐。
- 在 FIELD3 之前紧接着将 FIELD1 在字节边界处对齐。
因为 DFHLS2JS 不会插入等效的填充字节,所以您必须在 DFHLS2JS处理结构之前显式声明这些字节。 例如:
3 PAD1 FIXED BINARY(7),
3 PAD2 FIXED BINARY(7),
3 PAD3 FIXED BINARY(7),
3 FIELD1 FIXED BINARY(7),
3 FIELD2 FIXED BINARY(31),
3 FIELD3 FIXED BINARY(63);或者,也可以更改该结构,将所有字段声明为未对齐,并重新编译使用该结构的应用程序。 有关 PL/I 结构内存对齐需求的更多信息,请参阅 Enterprise PL/I for z/OS 产品信息。| PL/I 数据描述 | JSON 模式定义 |
|---|---|
FIXED BINARY (n) |
其中 n 是可由原语表示的最大值。 |
UNSIGNED FIXED BINARY(n)限制: 仅限 Enterprise PL/I
|
其中 n 是可由原语表示的最大值。 |
FIXED DECIMAL( n , m ) |
其中: x 是可用的最小单位 = 1/10 m y 是可以由 n 和 m 的组合表示的最大值 z 是可以由 n 和 m 的组合表示的最大值 |
FIXED DECIMAL(15)当 DATETIME=PACKED15 时,在映射级别 3.0 和更高版本上受支持 |
时间戳记的格式由 RFC3339定义。 |
BIT(n)其中 n 是 8 的倍数。 不支持其他值。 |
其中
m
=
n
/8
|
CHARACTER( n ) 在映射级别 1.2 和更高级别上还支持 限制:
VARYINGZ 仅受 Enterprise PL/I 支持 |
|
GRAPHIC(
n
)
在映射级别 1.2 和更高级别上还支持 限制:
VARYINGZ 仅受 Enterprise PL/I 支持 |
在映射级别 1.0 和 1.1,其中
m
=
2*
n
:
在映射级别 1.2 或更高级别上:
|
WIDECHAR(
n
)
限制: 仅限 Enterprise PL/I
|
在映射级别 1.0 和 1.1,其中
m
=
2*
n
:
在映射级别 1.2 或更高级别上:
在映射级别 4.0 和更高版本上, CICS® 使用 UTF-16 数据填充应用程序数据结构字段。
|
ORDINAL限制: 仅限 Enterprise PL/I
|
|
BINARY FLOAT( n ) 其中 在映射级别 1.2 和更高级别上受支持。 注: IBM® 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于浮点数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑将 BINARY FLOAT 数据类型的使用替换为固定精度替代方法。
|
|
BINARY FLOAT( n ) 其中 不支持大于 53 的值。 在映射级别 1.2 和更高级别上受支持。 注: IBM 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于浮点数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑将 BINARY FLOAT 数据类型的使用替换为固定精度替代方法。
|
|
DECIMAL FLOAT( n ) 其中 在映射级别 1.2 和更高级别上受支持。 注: IBM 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于浮点数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑将 DECIMAL FLOAT 数据类型的使用替换为固定精度替代方法。
|
|
DECIMAL FLOAT( n ) 其中 不支持大于 16 的值。 在映射级别 1.2 和更高级别上受支持。 注: IBM 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于浮点数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑将 DECIMAL FLOAT 数据类型的使用替换为固定精度替代方法。
|
|
| 名称 ( n ) 数据描述 | 对于原语:关于数据声明:
其中,data description JSON 是 PL/I 数据描述的 JSON 模式表示。 |