COBOL 到 JSON 模式映射

DFHLS2JS 实用程序支持 COBOL 数据结构与JSON模式定义之间的映射。

COBOL 名称如何转换为JSON

COBOL 名称按照以下规则转换为 JSON 名称:

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

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

  • 连字符替换为下划线。 连续连字符的字符串替换为连续的下划线。

    例如,current-user--id 变为 current_user__id

  • 由连字符定界并且只包含大写字符的名称段转换为小写。

    例如,CA-REQUEST-ID 变为 ca_request_id

  • 向以数字字符开头的名称添加前导下划线。

    例如,9A-REQUEST-ID 变为 _9a_request_id

COBOL 数据描述元素如何映射到JSON

CICS® 将 COBOL 数据描述元素映射到模式元素,具体映射关系参见表1。
限制:
  • COBOL 在表1中显示的数据描述元素不受 DFHLS2JS 支持。
  • 不支持级别号为 66 和 77 的数据描述项。 将忽略级别号为 88 的数据描述项。
  • 不支持对数据描述条目使用以下子句:
    • REDEFINES
    • RENAMES;即级别 66
    • DATE FORMAT
  • 将忽略以下针对数据描述项的子句:
    • BLANK WHEN ZERO
    • JUSTIFIED
    • VALUE
  • 支持 SIGN 子句 SIGN TRAILING。 仅当 DFHLS2JS 中指定的映射级别为 1.2 或更高时,才支持 SIGN 子句 SIGN 前导。
  • 在映射级别 1.2 或更高,SIGN TRAILING 和 SIGN LEADING 子句均支持 SEPARATE CHARACTER。
  • 不支持以下针对 USAGE 子句的短语:
    • OBJECT REFERENCE
    • POINTER
    • FUNCTION-POINTER
    • PROCEDURE-POINTER
  • 以下针对 USAGE 子句的短语在映射级别 1.2 或更高受支持:
    • COMPUTATIONAL-1
    • COMPUTATIONAL-2
  • DISPLAY 和 COMPUTATIONAL-5 数据描述项仅支持的 PICTURE 字符为 9、S 和 Z。
  • PACKED-DECIMAL 数据描述项所支持的 PICTURE 字符为 9、S、V 和 Z。
  • 已编辑的数字数据描述项仅支持的 PICTURE 字符为 9 和 Z。
  • 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且 CHAR-VARYING 参数设置为 NULL ,那么字符数组将映射到 string 并作为以 null 结束的字符串进行处理。
  • 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且 CHAR-VARY 参数设置为 BINARY ,那么字符数组将映射到 string 并作为二进制数据进行处理。
  • 如果 MAPPING-LEVEL 参数设置为 $TAG1 1.2 $TAG2 或更高版本,并且 CHAR-VARYING 参数设置为到了折叠,那么将忽略字符串的尾部空格。
  • 映射级别 4.0 或更高级别支持 OCCURS DEPENDING ON 子句. 不支持复合的 OCCURS DEPENDING ON。 这表示 OCCURS DEPENDING ON 仅受结构最后一个字段的支持。
  • 任何映射级别上都支持 OCCURS INDEXED BY 子句。
表 1. COBOL 数据描述元素映射参考
COBOL 数据描述 JSON 模式定义

PIC X(n)
PIC A(n)
PIC G(n) DISPLAY-1
PIC N(n)
"type":"string",
"maxLength":n

PIC S9 DISPLAY
PIC S99 DISPLAY
PIC S999 DISPLAY
PIC S9999 DISPLAY
PIC S9(n) DISPLAY
PIC S9(n) COMP
PIC S9(n) COMP-4
PIC S9(n) COMP-5
PIC S9(n) BINARY
"type":"integer",
"minimum":-(n+1),
"maximum":n
其中 n 是可以由“9”字符模式表示的最大值。

PIC 9 DISPLAY
PIC 99 DISPLAY
PIC 999 DISPLAY
PIC 9999 DISPLAY
PIC 9(n) DISPLAY
PIC 9(n) COMP
PIC 9(n) COMP-4
PIC 9(n) COMP-5
PIC 9(n) BINARY
"type":"integer",
"minimum":0,
"maximum":n
其中 n 是可以由“9”字符模式表示的最大值。

PIC S9(m)V9(n) COMP-3

"type":"number",
"format":"decimal",
"minimum":x,
"maximum":y,
"multipleOf":z

其中:

x 是可由字符“9”的模式表示的最小值。

y 是可由字符“9”的模式表示的最大值。

z 是可用的最小单位 = 1/10 n



PIC 9(m)V9(n) COMP-3

"type":"number",
"format":"decimal",
"minimum": 0,
"maximum":y,
"multipleOf":z

其中:

y 是可由字符“9”的模式表示的最大值。

z 是可用的最小单位 = 1/10 n



PIC S9(15) COMP-3

在映射级别 3.0 上受支持 (当 DATETIME=PACKED15 时)

"type":"string",
"format":"date-time"

时间戳记的格式由 RFC3339定义。



PIC S9(m)V9(n) DISPLAY

在映射级别 1.2 和更高受支持

"type":"number",
"format":"decimal",
"minimum":x,
"maximum":y,
"multipleOf":z

其中:

x 是可由字符“9”的模式表示的最小值。

y 是可由字符“9”的模式表示的最大值。

z 是可用的最小单位 = 1/10 n


COMP-1

在映射级别 1.2 和更高受支持

注: IBM® 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能不会精确从一个表示转换为另一个表示。

对于浮点数据类型,某些极大或极小值可能无效。 转换为 HFP 表示或从 HFP 表示转换时,某些值可能会不精确。 如果精确转换很重要,请考虑将 COMP-1 数据类型的使用替换为固定精度替代方法。

"type":"number",
"format":"float"

COMP-2

在映射级别 1.2 和更高受支持

注: IBM 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能不会精确从一个表示转换为另一个表示。

对于双精度数据类型,某些极大或极小值可能无效。 转换为 HFP 表示或从 HFP 表示转换时,某些值可能会不精确。 如果精确转换很重要,请考虑将 COMP-2 数据类型的使用替换为固定精度替代方法。

"type":"number",
"format":"double"
数据描述 OCCURS n TIMES
在映射级别 4.0 和更低级别
对于原语:
"type":"array"
"maxItems":n
"minItems":n
"items":{
          "type":"object",
          "properties":{name:{ data description JSON }}
          "required":[name]
          }
对于结构:
"type":"array"
"maxItems":n
"minItems":n
"items":{data description JSON}

其中,data description JSON 是 COBOL data description 的 JSON 模式表示,name 是 COBOL data description 的名称。

在映射级别 4.1 和更高版本

TRUNCATE-NULL-ARRAYS = 已禁用

结构化数组和基本数组映射如下所示。
"type":"array"
"maxItems":n
"minItems":n
"items":{data description JSON}

TRUNCATE-NULL-ARRAYS = 已启用

基本数组映射如上,结构化数组如下所示。
"type":"array"
"maxItems":n
"minItems":0
"items":{data description JSON}

数据描述 OCCURS n TO m TIMES
DEPENDING ON
t

在映射级别 4.0 上受支持

"field-name":{
               "type":"array",
               "maxItems":m
               "minItems":n
               "items":{ ... }
              }

数组项的内容取决于使用的数据类型。

PIC X OCCURS
n TIMES
PIC A OCCURS n PIC N OCCURSPIC G DISPLAY-1 OCCURS n TIMES
TIMES
n TIMES

CHAR-OCCURS =STRING 时:

"field-name":{
               "type":"string",
               "maxLength":n
              }

它是一个字符串。

CHAR-OCCURS =ARRAY 时:
在映射级别 4.0 和更低级别
"field-name":{
              "maxItems":m,
              "minItems":n,
              "items":{
                "type":"object",
                "properties":{
                   "field-name":{
                   "type":"string",
                   "maxLength":1
                                  }
                               },
                       "required":["field-name"]
                         }
               }

这是单字符的数组。

在映射级别 4.1 和更高版本

TRUNCATE-NULL-ARRAYS = 已禁用

结构化数组和基本数组映射如下所示。
"type":"array"
"maxItems":n
"minItems":n
"items":{data description JSON}

TRUNCATE-NULL-ARRAYS = 已启用

基本数组映射如上,结构化数组如下所示。
"type":"array"
"maxItems":n
"minItems":0
"items":{data description JSON}
PIC X OCCURS
n TO m PIC A OCCURS
TIMES
DEPENDING ON t

n TO m TIMES
DEPENDING ON t


PIC G DISPLAY-1 OCCURS n TO m PIC N OCCURS
TIMES
DEPENDING ON t

n TO mTIMES
DEPENDING ON t

CHAR-OCCURS =STRING 时:

"field-name":{
              "type":"string",
              "maxLength":m
              "minLength":n
             }
PIC N(n) USAGE NATIONAL

CHAR-USAGE =NATIONAL 时: PIC N( n )

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

"type":"string",
"maxLength":n

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