C 和 C++ 到 JSON 模式的映射
DFHLS2JS 实用程序支持 C 和 C++ 数据类型与 JSON 模式定义之间的映射。
C 和 C++ 名称将按照以下规则转换为 JSON 名称:
- 在 JSON 属性名称中无效的字符将替换为 "
X'。例如,
monthly-total变为monthlyXtotal。 - 将通过添加一个或多个数字位来使重复的名称唯一。
例如,两个
year实例将变为year和year1。
DFHLS2JS 根据下表将 C 和 C++ 数据类型映射到模式元素。 DFHLS2JS不支持表中未显示的 C 和 C++ 类型。 结构支持
_Packed 限定符。 以下限制适用:- 头文件必须包含顶级
struct实例。 - 您不能声明包含了自身来作为成员的结构类型。
- 不支持以下 C 和 C++ 数据类型:
decimallong doublewchar_t(仅 C++)
- 如果头文件中存在以下项,那么将忽略这些项。
- 存储类说明符:
autoregisterstaticexternmutable
- 限定符:
constvolatile_Export(仅 C++)
- 函数说明符:
inline(仅 C++)virtual(仅 C++)
- 初始值
- 头文件不得包含以下项:
- 并集
- 类声明
- 枚举数据类型
- 指针类型变量
- 模板声明
- 预定义宏; 即,名称以两个下划线字符 (
__) 开头和结尾的宏 - 续行序列(其后紧跟换行符的 \ 符号)
- 原型函数声明符
- 预处理器伪指令
- 位字段
__cdecl(或_cdecl)关键字 (仅限 C + +)
- 应用程序员必须使用 32 位编译器以确保
int映射到 4 个字节。 - 不支持以下 C++ 保留的关键字:
explicitusingnamespacetypenametypeid
- 如果 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
]
|
|
char16_t[
n
]
|
在映射级别 4.0 或更高级别上:
在运行时, CICS® 使用 UTF-16 数据填充应用程序数据结构字段。 |
char[8]当 |
时间戳记的格式由 RFC3339定义。 |
charshortintlonglong long |
其中 n 是可由原语表示的最大值。 |
unsigned charunsigned shortunsigned intunsigned longunsigned long long |
其中 n 是可由原语表示的最大值。 |
(仅 C++) |
|
在映射级别 1.2 和更高级别上受支持。 |
注: IBM® 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于浮点数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑使用固定精度替代方法来取代使用浮点数据类型。
|
在映射级别 1.2 和更高级别上受支持。 |
注: IBM 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于双精度数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑使用固定精度替代方法来取代对双精度数据类型的使用。
|
| 类型名称 [ n ] | 对于原语:对于结构:其中,type JSON 是 C 或 C++ 类型的 JSON 模式表示法。 |