读取 JSON 消息时,解析器通过将 JSON 值映射到对应的消息树元素类型来根据输入位流构建消息树。 将消息树序列化成输出位流时,会将树元素类型映射到 JSON 值类型。
使用 " 图形数据映射编辑器 " 变换 JSON 消息时,请确保使用 添加用户定义 函数定义的 JSON 元素名称根据 XML 元素命名规则有效。 JSON 允许比 XML 更广泛的字符范围,例如, JSON 对象可以包含 @ 字符,但是, 图形数据映射编辑器 仅允许在 XML 或 XPath 中有效的元素名称。
下表显示如何将 JSON 消息值映射到消息树元素类型:
JSON 位流到消息树值映射
JSON 解析器根据下表中的规则将 JSON 值映射到消息树元素类型:
| 位流中的 JSON 值 |
解析为 |
| 字符串 |
字符 |
JSON 数字值呈现为:
- 减号前缀(如果值为负)
- 至少一个数字(可以为零)
- 无小数点部分
- 无指数
|
INTEGER |
JSON 数字值呈现为:
- 减号前缀(如果数字为负)
- 整数部分中的至少一个数字(可以为零)
- 以下之一或两者:
- 点和小数部分中的至少一个数字(可以为零)
- 使用大写“E”或小写“e”的指数、可选加号或减号以及至少一个数字
|
FLOAT |
| 布尔 |
BOOLEAN |
| Null |
NULL |
消息树到 JSON 消息值映射
JSON 序列化器根据下表中的规则将消息树元素映射到 JSON 值类型:
| 消息树元素类型 |
JSON 域序列化为 |
| |
JSON 类型 |
FORMAT |
| BIT |
字符串 |
任何数量的 0 和 1 |
| BLOB |
字符串 |
偶数个十六进制数字 |
| 字符 |
字符串 |
使用 JSON 字符串对下面所列字符进行转义的字符型数据:
- " - 引号 (U+0022)
- \ - 反斜线 (U+005C)
- / - 斜线 (U+002F)
- 退格 (U+0008)
- 换页 (U+000C)
- 换行 (U+000A)
- 回车符 (U+000D)
- 跳格 (U+0009)
请参阅 https://tools.ietf.org/html/rfc7159#section-7 以获取更多详细信息。 |
| DATE |
字符串 |
标准 ESQL 字符串表示,“yyyy-mm-dd” |
| TIME 和 GMTTIME |
字符串 |
标准 ESQL 字符串表示,“hh:mm:ss.ffffff” |
| INTEGER |
Number |
- 减号前缀(如果数字为负)
- 至少一个数字(可以为零)
- 无小数点
- 无指数
|
| FLOAT |
Number |
- 减号前缀(如果数字为负)
- 整数部分中的至少一个数字(可以为零)
- 小数部分中的至少一个数字(可以为零)
- 使用大写“E”的指数部分、加号或减号以及至少一个数字
|
| DECIMAL |
Number |
- 减号前缀(如果数字为负)
- 整数部分中的至少一个数字(可以为零)
- 小数部分中的至少一个数字(可以为零)
当序列化到 JSON 时,不支持十进制文字“NAN”和“INF”等。
|
| BOOLEAN |
布尔 |
true 或 false 序列化器仅序列化值为 true 或 false 的布尔逻辑树元素;不支持未知类型
|
| NULL |
Null |
Null |
| ROW |
对象 |
注:将 ROW 直接分配到 JSON 域树不会产生 JSON 数组。
DECLARE myRow ROW;
SET myRow.rowData[1].fieldOne = 'Row1Field1';
SET myRow.rowData[1].fieldTwo = 'Row1Field2';
SET myRow.rowData[2].fieldOne = 'Row2Field1';
SET myRow.rowData[2].fieldTwo = 'Row2Field2';
SET OutputRoot.JSON.Data.aRow = myRow; 产生以下 JSON 位流
"aRow":{
"rowData": {"fieldOne":"Row1Field1","fieldTwo":"Row1Field2"},"
"rowData": {"fieldOne":"Row2Field1","fieldTwo":"Row2Field2"}
} |
| ROW |
Array |
要根据 ROW 类型产生 JSON 数组,还要设置 JSON.Array 字段。
SET OutputRoot.JSON.Data.aRow = myRow;
SET OutputRoot.JSON.Data.aRow TYPE = JSON.Array; 产生以下 JSON 位流
"aRow":[
{"fieldOne":"Row1Field1","fieldTwo":"Row1Field2"},
{"fieldOne":"Row2Field1","fieldTwo":"Row2Field2"}
] |