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

IBM Watson Cloud上Docplex决策优化输出JSON乱码问题求助

在IBM Watson Cloud中Docplex生成JSON输出乱码的解决方案

问题分析

本地运行正常但云端生成JSON乱码,核心原因是云端环境的输出流处理逻辑与本地存在差异,且你的JSON写入代码未对齐原有CSV代码的Python版本兼容处理,导致编码写入方式不匹配。

解决方案

根据你的输出内容类型,分两种情况调整write_all_outputs函数:

场景1:输出内容为可序列化Python对象(字典/列表等)

修改函数以对齐原有CSV的版本兼容逻辑,同时确保JSON序列化时保留UTF-8字符:

import json
import sys
from six import iteritems
from docplex.util.environment import get_environment

def write_all_outputs(outputs):
    for (name, content) in iteritems(outputs):
        json_file = '%s.json' % name
        print(json_file)
        with get_environment().get_output_stream(json_file) as fp:
            # 序列化时禁用ASCII转义,保留原字符
            json_content = json.dumps({name: content}, ensure_ascii=False, indent=2)
            if sys.version_info[0] < 3:
                # Python 2环境下直接写入编码后的字节流
                fp.write(json_content.encode('utf-8'))
            else:
                # 对齐CSV处理逻辑,编码后写入(适配云端流模式)
                fp.write(json_content.encode('utf-8'))
    if len(outputs) == 0:
        print("Warning: no outputs written")

场景2:输出内容为Pandas DataFrame(与原有CSV场景一致)

如果outputs中的值是DataFrame,直接用json.dumps序列化会导致结构异常,需改用DataFrame自带的to_json方法:

import json
import sys
import pandas as pd
from six import iteritems
from docplex.util.environment import get_environment

def write_all_outputs(outputs):
    for (name, df) in iteritems(outputs):
        json_file = '%s.json' % name
        print(json_file)
        with get_environment().get_output_stream(json_file) as fp:
            # 将DataFrame转为JSON字符串,指定格式和编码
            json_content = df.to_json(orient='records', ensure_ascii=False, indent=2)
            if sys.version_info[0] < 3:
                fp.write(json_content.encode('utf-8'))
            else:
                fp.write(json_content.encode('utf-8'))
    if len(outputs) == 0:
        print("Warning: no outputs written")

关键调整点

  1. 添加ensure_ascii=False:避免非ASCII字符被转义为Unicode编码(如\uXXXX),确保输出的JSON可读性正常。
  2. 对齐Python版本处理逻辑:严格遵循原有CSV代码的版本分支,保证云端Python2/Python3环境下的写入兼容性。
  3. DataFrame特殊处理:若输出是DataFrame,必须使用df.to_json而非直接json.dumps,否则会生成非预期的JSON结构。

部署配置验证

确保部署中的OUTPUT_DATA配置正确匹配JSON后缀:

solve_payload = {
    client.deployments.DecisionOptimizationMetaNames.OUTPUT_DATA: [
        {
            "id" : ".*\\.json"
        }
    ]
}

(注:双反斜杠是Python字符串的转义要求,确保正则表达式能正确匹配.json后缀)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:20:43