C 和 C++ 到 JSON 模式的映射

DFHLS2JS 实用程序支持 C 和 C++ 数据类型与 JSON 模式定义之间的映射。

C 和 C++ 名称将按照以下规则转换为 JSON 名称:
  1. 在 JSON 属性名称中无效的字符将替换为 " X '。

    例如,monthly-total 变为 monthlyXtotal

  2. 将通过添加一个或多个数字位来使重复的名称唯一。

    例如,两个 year 实例将变为 yearyear1

DFHLS2JS 根据下表将 C 和 C++ 数据类型映射到模式元素。 DFHLS2JS不支持表中未显示的 C 和 C++ 类型。 结构支持 _Packed 限定符。 以下限制适用:
  • 头文件必须包含顶级 struct 实例。
  • 您不能声明包含了自身来作为成员的结构类型。
  • 不支持以下 C 和 C++ 数据类型:
    • decimal
    • long double
    • wchar_t(仅 C++)
  • 如果头文件中存在以下项,那么将忽略这些项。
    存储类说明符:
    • auto
    • register
    • static
    • extern
    • mutable
    限定符:
    • const
    • volatile
    • _Export(仅 C++)
    函数说明符:
    • inline(仅 C++)
    • virtual(仅 C++)
    初始值
  • 头文件不得包含以下项:
    • 并集
    • 类声明
    • 枚举数据类型
    • 指针类型变量
    • 模板声明
    • 预定义宏; 即,名称以两个下划线字符 ( __ ) 开头和结尾的宏
    • 续行序列(其后紧跟换行符的 \ 符号)
    • 原型函数声明符
    • 预处理器伪指令
    • 位字段
    • __cdecl (或 _cdecl) 关键字 (仅限 C + +)
  • 应用程序员必须使用 32 位编译器以确保 int 映射到 4 个字节。
  • 不支持以下 C++ 保留的关键字:
    • explicit
    • using
    • namespace
    • typename
    • typeid
  • 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且 CHAR-VARYING 参数设置为 NULL ,那么字符数组将映射到 string 并作为以 null 结束的字符串进行处理。
  • 如果将 MAPPING-LEVEL 参数设置为 1.2 或更高,并将 CHAR-VARYING 参数设置为 BINARY,那么字符数组会映射到 xsd:base64Binary 并作为二进制数据进行处理。
  • 如果将 MAPPING-LEVEL 参数设置为 1.2 或更高,并将 CHAR-VARYING 参数设置为 COLLAPSE,那么会为字符串生成 <xsd:whiteSpace value="collapse"/>
C 和 C++ 数据类型 模式 simpleType
char[ z ]

"type":"string"
"maxlength":
z
char16_t[ n ]

在映射级别 4.0 或更高级别上:


"type":"string"
"maxlength":
n

在运行时, CICS® 使用 UTF-16 数据填充应用程序数据结构字段。

char[8]

DATETIME=PACKED15 时,在映射级别 3.0 和更高版本上受支持

"type":"string"
"format":"date-time"
时间戳记的格式由 RFC3339定义。

char
short
int
long
long long

"type":"integer",
"minimum":- (
n
+ 1),
"maximum":
n
其中 n 是可由原语表示的最大值。

unsigned char
unsigned short
unsigned int
unsigned long
unsigned long long

"type":"integer",
"minimum":0,
"maximum":
n
其中 n 是可由原语表示的最大值。
bool
(仅 C++)
"type":"boolean"
float
在映射级别 1.2 和更高级别上受支持。
"type":"number",
"format":"float"
注: IBM® 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于浮点数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑使用固定精度替代方法来取代使用浮点数据类型。
double
在映射级别 1.2 和更高级别上受支持。
"type":"number",
"format":"double"
注: IBM 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于双精度数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑使用固定精度替代方法来取代对双精度数据类型的使用。
类型名称 [ n ] 对于原语:

"type":"array"
"maxItems":
n
"minItems":
n
"items":{
"type":"object",
"properties":{
name
:{
type JSON
}
}
"required":[
name
]
}
对于结构:

"type":"array"
"maxItems":
n
"minItems":
n
"items":{
type JSON
}
其中,type JSON 是 C 或 C++ 类型的 JSON 模式表示法。