在Python中生成良好JSON字符串
我的系统主要是用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 字符串对象没有被释放或者被其他方式修改过。