如何使用Python将COBOL语句转换为动态JSON结构
COBOL语句转动态JSON结构需求
示例输入
# Example COBOL statement cobol_statement = "MODIFY MAP CURSOR AT NBS-DS-01(1) FOR FIELD (NBS-DS-01, NBS-DS-02(2), NBS-DS-03(3))"
目标输出
{"cursor": "NBS-DS-01(1)", "for": ["NBS-DS-01","NBS-DS-02(2)","NBS-DS-03(3)"]}
动态适配实现方案
要实现新增字段自动转换,核心是通过关键字映射规则做通用解析,无需修改核心逻辑。以下是Python实现示例:
实现代码
import re import json def cobol_to_json(cobol_stmt): # 配置关键字映射:COBOL标识 -> JSON键,标记是否为列表类型 key_mappings = [ {"cobol_key": "CURSOR AT", "json_key": "cursor", "is_list": False}, {"cobol_key": "FOR FIELD", "json_key": "for", "is_list": True} ] result = {} for mapping in key_mappings: cobol_key = mapping["cobol_key"] json_key = mapping["json_key"] is_list = mapping["is_list"] if is_list: # 匹配括号包裹的多值内容 pattern = rf"{cobol_key}\s*\((.*?)\)" match = re.search(pattern, cobol_stmt, re.IGNORECASE) if match: # 分割并去除每个元素的前后空格 items = [item.strip() for item in match.group(1).split(",")] result[json_key] = items else: # 匹配单个连续值(到下一个关键字或语句结尾) pattern = rf"{cobol_key}\s+(\S+)" match = re.search(pattern, cobol_stmt, re.IGNORECASE) if match: result[json_key] = match.group(1) return json.dumps(result, indent=2) # 测试示例语句 cobol_statement = "MODIFY MAP CURSOR AT NBS-DS-01(1) FOR FIELD (NBS-DS-01, NBS-DS-02(2), NBS-DS-03(3))" print(cobol_to_json(cobol_statement))
动态扩展说明
如果需要新增字段解析,比如COBOL语句新增UPDATE STATUS (ACTIVE, INACTIVE),只需在key_mappings中添加一条配置即可:
{"cobol_key": "UPDATE STATUS", "json_key": "update_status", "is_list": True}
代码会自动识别并完成转换,无需修改核心解析逻辑。
内容的提问来源于stack exchange,提问作者Jeyasekar Marshal
相关产品推荐
相关产品推荐

