如何将含单引号字典的列表转换为RPC调用可用的双引号JSON数组
Python RPC调用传入JSON数组格式问题解决方案
首先明确一个基础认知:Python的字符串存储本身不存在单引号/双引号的差异,单双引号只是代码中定义字符串的语法差异,你在调试时看到的单引号只是Python的对象展示格式,不是字符串本身的属性,所以根本不存在“强制列表内字符串用双引号”的说法,你遇到的报错本质是参数的类型或序列化逻辑不符合RPC接口要求。
适配两种常见RPC参数要求的解决方案
情况1:RPC客户端要求传入原生Python序列(客户端内部自动完成JSON序列化)
这是绝大多数RPC封装库的默认要求,你之前直接传原生列表报错的原因和引号无关,优先排查两个点:
- 检查字段值的类型是否符合接口要求:比如接口要求金额为字符串类型,你示例中mylist2的金额传了float类型就会触发类型报错
- 注意Python的布尔值为大写
True/False,不要误写为其他语言的小写true/false
如果确认结构和类型都没问题,可以通过先序列化再反序列化的方式得到完全JSON兼容的原生结构,再传入调用即可:
import json # 序列化再反序列化,过滤所有Python特有的类型特性 compatible_list1 = json.loads(json.dumps(mylist1)) compatible_list2 = json.loads(json.dumps(mylist2)) # 执行调用 rpc.command(compatible_list1, compatible_list2, 0, True)
情况2:RPC调用要求传入JSON格式的数组字符串
如果你的RPC是命令行工具、或者明确要求传入JSON字符串作为参数,不要直接传原生列表,直接传入json.dumps的输出结果即可,注意不要额外给JSON字符串加包裹引号:
import json import subprocess # 生成标准双引号的JSON数组字符串 list1_json = json.dumps(mylist1) list2_json = json.dumps(mylist2) # 示例:调用命令行RPC工具 subprocess.run( ["rpc-cli", "send", list1_json, list2_json, "0", "true"], check=True )
内容的提问来源于stack exchange,提问作者SacWheeler
相关产品推荐
相关产品推荐

