Files
cobol-java-v3/layout/JSON格式说明v2.0.md
T

9.9 KiB
Raw Blame History

cobol_testgen v4 生成 JSON — 格式说明 v2.0

修订履历

版本 日期 变更内容
v2.0 明确1个json文件=1组数据(group)的命名规则,格式本身与v1相同

说明

v2.0 格式本身与v1完全一致,仅补充:

  1. 一组数据单独放一个json文件
  2. 一个文件内的records数组包含该组的全部处理单元
  3. 命名规则追加 _g{groupId} 标识组号

完整规格 JSONoutput/json/{プログラム名}_g{groupId}.json

最外层结构

{
  "program": "SAN01MAT",
  "records": [
    {
      "input": { ... }
    }
  ]
}

1条record = 1次处理单元。例如匹配(1:1)时:

  • 匹配成功:record内同时包含两个输入FD
  • R01-onlyrecord内只含R01的FD
  • R02-onlyrecord内只含R02的FD

多个record按处理顺序排列,组成一组完整的测试数据。


例1:单文件CSV输入(1组1条记录)

文件 ZAN01CHK_g1.json

{
  "program": "ZAN01CHK",
  "records": [
    {
      "input": {
        "R01INNFIL": {
          "R01LINE": "A0000000,        ,        ,    ,    ,0, ,                                       "
        }
      }
    }
  ]
}

例2:单文件二进制输入(1组多条记录)

文件 ZAN02CHK_g1.json

{
  "program": "ZAN02CHK",
  "records": [
    {
      "input": {
        "R01INNFIL": {
          "R01APPL-ID":   "A0000001",
          "R01EMP-ID":    "00000101",
          "R01APPL-DATE": "20000101",
          "R01START-TIME":"0201",
          "R01END-TIME":  "0301",
          "R01STATUS":    "B",
          "R01OVT-TYPE":  "C",
          "R01FILLER":    "D000000000000000000000000000000000000000000001"
        }
      }
    },
    {
      "input": {
        "R01INNFIL": {
          "R01APPL-ID":   "A0000002",
          "R01EMP-ID":    "00000102",
          "R01APPL-DATE": "20000102",
          "R01START-TIME":"0202",
          "R01END-TIME":  "0302",
          "R01STATUS":    "C",
          "R01OVT-TYPE":  "D",
          "R01FILLER":    "D000000000000000000000000000000000000000000002"
        }
      }
    }
  ]
}

例3:多文件输入(与v1相同)

文件 ZAN03CHK_g1.json

{
  "program": "ZAN03CHK",
  "records": [
    {
      "input": {
        "R01INNFIL": {
          "R01APPL-ID":   "A0000001",
          "R01EMP-ID":    "00000101",
          "R01APPL-DATE": "20000101",
          "R01START-TIME":"0201",
          "R01END-TIME":  "0301",
          "R01STATUS":    "B",
          "R01OVT-TYPE":  "C",
          "R01FILLER":    "D000000000000000000000000000000000000000000001"
        },
        "R02INNFIL": {
          "R02EMP-ID":    "00000401",
          "R02DATE":      "20000101",
          "R02TIME-IN":   "0501",
          "R02TIME-OUT":  "0601",
          "R02FILLER":    "E0000000000000000000000000000000000000000000000000000001"
        },
        "R03INNFIL": {
          "R03HOLIDAY-DATE": "20000101",
          "R03HOLIDAY-FLG":  "F",
          "R03FILLER":       "G0000000000000000000000000000000000000000000000000000000000000000000001"
        }
      }
    }
  ]
}

例4:二文件匹配(マッチング1:1

v1中ZAN04MAT示例是1条record = 1次匹配处理。

对于匹配(1:1)测试,1组数据 = 1个json文件。1组内包含多条recordR01-only、R02-only、匹配),按处理顺序排列。

文件1SAN01MAT_g1.json

两端不匹配:先处理R01-only(a001) → 3次匹配(a002/b002, a003/b003, a004/b004) → 最后R02-only(a005)。

{
  "program": "SAN01MAT",
  "records": [
    {
      "input": {
        "R01INNFIL": {
          "R01A001": "a001",
          "R01A002": "b001",
          "R01A003": "c001",
          "R01DATA": "c00000000011"
        }
      }
    },
    {
      "input": {
        "R01INNFIL": {
          "R01A001": "a002",
          "R01A002": "b002",
          "R01A003": "c002",
          "R01DATA": "c00000000012"
        },
        "R02INNFIL": {
          "R02A001": "a002",
          "R02A002": "b002",
          "R02A003": "c002",
          "R02DATA": "c00000000012"
        }
      }
    },
    {
      "input": {
        "R01INNFIL": {
          "R01A001": "a003",
          "R01A002": "b003",
          "R01A003": "c003",
          "R01DATA": "c00000000013"
        },
        "R02INNFIL": {
          "R02A001": "a003",
          "R02A002": "b003",
          "R02A003": "c003",
          "R02DATA": "c00000000013"
        }
      }
    },
    {
      "input": {
        "R01INNFIL": {
          "R01A001": "a004",
          "R01A002": "b004",
          "R01A003": "c004",
          "R01DATA": "c00000000014"
        },
        "R02INNFIL": {
          "R02A001": "a004",
          "R02A002": "b004",
          "R02A003": "c004",
          "R02DATA": "c00000000014"
        }
      }
    },
    {
      "input": {
        "R02INNFIL": {
          "R02A001": "a005",
          "R02A002": "b005",
          "R02A003": "c005",
          "R02DATA": "c00000000015"
        }
      }
    }
  ]
}

文件2SAN01MAT_g2.json

反向两端不匹配:先处理R02-only(a001) → 3次匹配 → 最后R01-only(a005)。

{
  "program": "SAN01MAT",
  "records": [
    {
      "input": {
        "R02INNFIL": {
          "R02A001": "a001",
          "R02A002": "b001",
          "R02A003": "c001",
          "R02DATA": "c00000000011"
        }
      }
    },
    {
      "input": {
        "R01INNFIL": {
          "R01A001": "a002",
          "R01A002": "b002",
          "R01A003": "c002",
          "R01DATA": "c00000000012"
        },
        "R02INNFIL": {
          "R02A001": "a002",
          "R02A002": "b002",
          "R02A003": "c002",
          "R02DATA": "c00000000012"
        }
      }
    },
    {
      "input": {
        "R01INNFIL": {
          "R01A001": "a003",
          "R01A002": "b003",
          "R01A003": "c003",
          "R01DATA": "c00000000013"
        },
        "R02INNFIL": {
          "R02A001": "a003",
          "R02A002": "b003",
          "R02A003": "c003",
          "R02DATA": "c00000000013"
        }
      }
    },
    {
      "input": {
        "R01INNFIL": {
          "R01A001": "a004",
          "R01A002": "b004",
          "R01A003": "c004",
          "R01DATA": "c00000000014"
        },
        "R02INNFIL": {
          "R02A001": "a004",
          "R02A002": "b004",
          "R02A003": "c004",
          "R02DATA": "c00000000014"
        }
      }
    },
    {
      "input": {
        "R01INNFIL": {
          "R01A001": "a005",
          "R01A002": "b005",
          "R01A003": "c005",
          "R01DATA": "c00000000015"
        }
      }
    }
  ]
}

文件3SAN01MAT_g3.json

中间不匹配:先匹配(a001) → R01-only(a003) → 匹配(a004) → R02-only(a002) → 匹配(a005)。

{
  "program": "SAN01MAT",
  "records": [
    {
      "input": {
        "R01INNFIL": {
          "R01A001": "a001",
          "R01A002": "b001",
          "R01A003": "c001",
          "R01DATA": "c00000000011"
        },
        "R02INNFIL": {
          "R02A001": "a001",
          "R02A002": "b001",
          "R02A003": "c001",
          "R02DATA": "c00000000011"
        }
      }
    },
    {
      "input": {
        "R01INNFIL": {
          "R01A001": "a003",
          "R01A002": "b003",
          "R01A003": "c003",
          "R01DATA": "c00000000013"
        }
      }
    },
    {
      "input": {
        "R01INNFIL": {
          "R01A001": "a004",
          "R01A002": "b004",
          "R01A003": "c004",
          "R01DATA": "c00000000014"
        },
        "R02INNFIL": {
          "R02A001": "a004",
          "R02A002": "b004",
          "R02A003": "c004",
          "R02DATA": "c00000000014"
        }
      }
    },
    {
      "input": {
        "R02INNFIL": {
          "R02A001": "a002",
          "R02A002": "b002",
          "R02A003": "c002",
          "R02DATA": "c00000000012"
        }
      }
    },
    {
      "input": {
        "R01INNFIL": {
          "R01A001": "a005",
          "R01A002": "b005",
          "R01A003": "c005",
          "R01DATA": "c00000000015"
        },
        "R02INNFIL": {
          "R02A001": "a005",
          "R02A002": "b005",
          "R02A003": "c005",
          "R02DATA": "c00000000015"
        }
      }
    }
  ]
}

DB类型时的输出

输入类型为DB时,每组生成一个独立的SQL insert文件。

文件种类 命名规则
Insert SQL(一组) {プログラムID}_g{groupId}.sql SAN01MAT_g1.sql

例(组1):

-- Group: 1
-- 用途: 员工主表基础数据
INSERT INTO EMPLOYEE (EMP_ID, EMP_NAME, BIRTH_DATE, SALARY) VALUES
('0000000001', '测试太郎', '1990-04-01', 350000.00),
('0000000002', '测试花子', '1995-07-15', 420000.00);

字段值规则

PIC JSON内表示
PIC X(n) 左对齐 + 空格填充 "A0000001" (8桁)
PIC 9(n) 右对齐 + 前补零 "00000101" (8桁)
PIC S9(n) 符号 + 右对齐 + 前补零 "+0000101"
PIC S9(n)V9(m) 符号 + 右对齐 + 含小数点 "+001234567" (V9(2)时实际为 +0012345.67)
PIC S9(n) COMP 十进制数字字符串(含符号) "300""-100000"
PIC S9(n) COMP-3 十进制数字字符串(含符号) "1234""-5678"
PIC 9(n) COMP-3 十进制数字字符串(无符号) "1234"
FILLER(纯保留) 字段名为FILLER的未使用区域 含有组ID和记录编号的可辨识模式 "D000000...001"
FILLER(业务保留) 字段名有具体名称但实际未使用的保留区 PIC X(n)填全空格、PIC 9(n)填全零

输出目录结构

output/
├── json/                    # 完整JSON(每组一个文件,输入类型=文件时输出)
│   ├── SAN01MAT_g1.json
│   ├── SAN01MAT_g2.json
│   └── SAN01MAT_g3.json
└── db/                      # DB insert SQL(每组一个文件,输入类型=DB时输出)
    ├── SAN01MAT_g1.sql
    ├── SAN01MAT_g2.sql
    └── SAN01MAT_g3.sql