Python中如何给C函数传递JSON字符串?
调用的都是同一个 C 函数,python 用的 ctypes
// c 语言中调用是这样
Init("{\"a\":\"../../av\", \"b\":\"../../bv\"}")
#如果用 python 调用 init 函数时,应该传递啥样的 json 字符串?这样不行😂,提示 expected key string
Init('{"a": "../av", "b": "../bv"}')
Python中如何给C函数传递JSON字符串?
…你先确认下你 python 版本,c 默认接受是 char*的话,ctypes 传的参数必须是 bytes
在Python里给C函数传JSON字符串,最直接的办法就是用ctypes。你得先把JSON转成C能认的字符串(c_char_p),调完C函数后再把返回的C字符串转回Python的。下面是个完整例子:
假设你有个C库函数,声明是 char* process_json(const char* json_str)。
import ctypes
import json
# 1. 加载C库
lib = ctypes.CDLL('./your_lib.so') # Linux/Mac
# lib = ctypes.CDLL('your_lib.dll') # Windows
# 2. 定义函数参数和返回类型
lib.process_json.argtypes = [ctypes.c_char_p]
lib.process_json.restype = ctypes.c_char_p
# 3. 准备JSON数据
data = {"name": "test", "value": 42}
json_str = json.dumps(data) # Python字符串
# 4. 调用C函数
# 需要把Python字符串编码成bytes
result_ptr = lib.process_json(json_str.encode('utf-8'))
# 5. 处理返回结果
if result_ptr:
result_str = result_ptr.decode('utf-8')
print("C函数返回:", result_str)
else:
print("C函数返回了空指针")
关键就两步:一是用json.dumps()把Python对象转成JSON字符串,然后.encode('utf-8')变成bytes传给C;二是C返回的c_char_p要用.decode('utf-8')转回Python字符串。
如果C函数要修改传入的字符串,记得用create_string_buffer分配可写内存。另外确保C那边用malloc分配的内存,Python这边能正确释放。
简单说就是:JSON转字符串再编码,调C函数后解码拿结果。
你把 c 的函数接口类型确定了
Init ( char *x )
然后 python 里
s="{“a”:"…/…/av", “b”:"…/…/bv"}"
.Init ( s )
试试 Init(’{“a”: “…/av”, “b”: “…/bv”}’.encode())
如果可以的话把完整代码发上来吧。
这样肯定不行啊,语法都是错误,python 双引号中,不能再用双引号啊
忽略 4 楼我说的,这样是不行的,就是我主帖里边的报的错:expected key string
很棒,这样是可行的👍👍👍👍
忘记了,应该可以更简单,试试
Init(b’{“a”: “…/av”, “b”: “…/bv”}’)
👍👍👍👍👍👍👍👍👍👍👍👍也可以,多谢,顺便再问一下,假如 C 函数返回一个句柄,用 python 调用这个函数的时候,应该怎么拿这个句柄呢?
摸索了下,搞定啦,多谢了😁


