You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python结合NiFi生成JSON:如何消除反斜杠与Unicode编码问题

解决JSON生成与验证问题的具体方案

一、消除反斜杠和Unicode前缀(u'...')

问题核心是用string.Template替换后,错误依赖Python默认字符串转换(如str())处理结果,而非用json模块做标准化序列化。修正步骤:

  1. 确保JSON模板是合法格式(字符串用双引号、结构完整),示例模板:
    {"name": "$name", "address": "$address"}
    
  2. 替换后不要直接输出字符串,而是先转字典再序列化:
    from string import Template
    import json
    
    with open('data.txt', 'r', encoding='utf-8') as f:
        template_str = f.readline().strip()
        template = Template(template_str)
    
        # 处理参数行(此处假设参数用逗号分隔,可根据实际调整解析逻辑)
        for line in f:
            params = line.strip().split(',')
            param_dict = {"name": params[0], "address": params[1]}
            
            # 替换模板并转标准JSON
            replaced_str = template.substitute(param_dict)
            json_obj = json.loads(replaced_str)
            final_json = json.dumps(json_obj, ensure_ascii=False)
            print(final_json)
    
  3. 关键:json.dumps()的ensure_ascii=False参数可保留非ASCII字符,避免转为Unicode编码。

二、解决JSON验证的"Expecting , delimiter"错误

该错误源于生成的JSON存在语法问题,针对你的场景排查:

  1. 参数分隔逻辑适配:
    地址含逗号时,用split(',')会拆分参数导致结构破坏。改用CSV模块解析参数行(自动处理含逗号的字段):
    import csv
    
    with open('data.txt', 'r', encoding='utf-8') as f:
        template_str = f.readline().strip()
        template = Template(template_str)
        reader = csv.reader(f)
        
        for params in reader:
            param_dict = {"name": params[0], "address": params[1]}
            replaced_str = template.substitute(param_dict)
            json_obj = json.loads(replaced_str)
            final_json = json.dumps(json_obj, ensure_ascii=False)
            print(final_json)
    
  2. 特殊字符转义:
    若参数含双引号,替换前需转义避免破坏JSON结构:
    param_dict["address"] = param_dict["address"].replace('"', '\\"')
    
  3. 强制语法校验:
    替换后先打印replaced_str,检查是否存在未闭合引号、多余逗号等语法错误。

三、多模板场景适配建议

如果模板种类多,可优化为:

  • 将模板按类型单独存为JSON文件,使用时读取对应文件
  • 统一参数行格式为键值对(如name=张三,address=xxx),解析更灵活:
    param_line = line.strip()
     param_dict = {}
     for item in param_line.split(','):
         key, value = item.split('=', 1)
         param_dict[key.strip()] = value.strip()
    

内容的提问来源于stack exchange,提问作者scoutjohn13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 23:47:43