Python如何读取NodeJS传递的JSON数组内的answertext字段值?
问题原因
问题出在两端的参数传递&解析逻辑都有错误:
- Node.js端直接展开对象数组作为进程启动参数时,JS对象会被默认转为
[object Object]字符串,你实际传递给Python的根本不是完整的JSON结构 - Python端的序列化/反序列化逻辑颠倒,
json.dumps是把Python对象转成JSON字符串,你反而把拿到的字符串又做了一次序列化,完全不符合解析要求
修复步骤
1. Node.js端修改
先把整个数据数组序列化为完整的JSON字符串,再作为单个参数传递给Python脚本,不要直接展开对象数组:
const pythonPromise = (data) => { return new Promise((resolve, reject) => { // 先序列化整个数组为JSON字符串 const jsonData = JSON.stringify(data); const python = spawn("python", ["./patricia/patricia.py", jsonData]) python.stdout.on("data", (data)=> { resolve(data.toString()) }) python.stderr.on("data", (data)=> { reject(data.toString()); }) }) }
2. Python端修改
直接读取传入的JSON字符串参数,用json.loads直接解析即可,不需要额外做dumps操作:
import sys import json from googlesearch import search # 读取第二个参数(第一个参数是脚本自身路径)并解析为Python对象 data = json.loads(sys.argv[1]) # 遍历获取所有answertext字段值 for item in data: current_answer = item['answertext'] print(f'Esto es lo que me esta llegando: {current_answer}') # 此处可添加谷歌搜索逻辑
兼容提示
如果你的数据中包含空格、特殊符号,建议在Node.js端序列化后额外做base64编码,Python端接收后先解码再解析JSON,避免命令行参数转义异常。
内容的提问来源于stack exchange,提问作者Irwin
相关产品推荐
相关产品推荐

