在Python中生成良好JSON字符串

3 投票
1 回答
763 浏览
提问于 2025-04-19 18:31

我的系统主要是用C++写的,它是一个复杂过程的核心部分。这个核心负责执行一些Python脚本,这些脚本完成多个任务,然后把结果显示在一个基于HTML技术的图形用户界面上。这个HTML文档是通过WTL加载的,但这不是重点,因为我的问题出现在Python生成的信息到达这个阶段之前。

import json
#my_python_dict is the Python dictionary information I want to send to C++ -> Javascript.
json_str = json.JSONEncoder().encode(my_python_dict)

然后我通过合适的API调用把这些信息发送到C++:API_Call是执行并返回Python生成的字符串的方法。

PyObject *json_string;
json_string = API_Call();
char * c_str;
c_str = PyString_AsString(json_string);

如果我执行这些代码,我会得到一些奇怪的字符和损坏的数据,而如果我把Python中的原始代码替换成这个:

import json
#my_python_dict is the Python dictionary information I want to send to C++ -> Javascript.
#json_str = json.JSONEncoder().encode(my_python_dict).
json_str = "This is a dummy test... of random lenght..."

它就能正常工作,所以我敢说问题可能出在json.JSONEncoder()上,或者是json.JSONEncoder和PyString_AsString()之间的编码问题。

有什么想法吗?

====================== 附注 ====================================

我一直在尝试一些想法来解决这个问题。

  • 最让我震惊的是:如果我从调试控制台复制编码后的字符串,粘贴到一个临时字符串中,然后返回那个字符串,一切都能正常工作!但显然我需要json.JSONEncoder的输出。

1 个回答

1

将评论转换为答案...

你什么时候会查看 c_str 的内容呢?确保在你使用 c_str 的内容之前,由 json.JSONEncoder().encode() 创建的 Python 字符串对象没有被释放或者被其他方式修改过。

撰写回答