使用jq与OpenAI API时遇“Invalid numeric literal”错误求助
Bash脚本调用OpenAI API翻译复制文本时jq解析错误
问题详情
我是编程新手,若问题表述不当还请见谅。我正在编写一个bash脚本,借助xclip和OpenAI实现复制文本的翻译功能,尝试提取OpenAI的响应内容(不含提示词)。脚本相关代码如下:
xdotool key ctrl+a xdotool key ctrl+c export OPENAI_API_KEY='XXXXXXXXXXXXXXXXXXXXXX' trans=$(openai api completions.create -m text-davinci-003 -p 'Translate '"$(xclip -o -sel c)"' into English.' | jq -r '.choices[0].text')
但执行echo "$trans"时始终返回错误:parse error: Invalid numeric literal at line 1, column 10。初步排查可能是单双引号使用或OpenAI的JSON输出问题,但不知如何测试。
解决方案
1. 修复引号嵌套问题
原脚本中-p参数的引号拼接逻辑混乱,导致传递给OpenAI API的提示词格式错误,进而返回非预期输出,引发jq解析失败。正确的写法应该用双引号包裹整个提示字符串,同时对复制的文本进行转义处理:
xdotool key ctrl+a xdotool key ctrl+c export OPENAI_API_KEY='XXXXXXXXXXXXXXXXXXXXXX' # 先提取并转义复制的文本,避免特殊字符破坏格式 copied_text=$(xclip -o -sel c | jq -R .) # 构造合法的提示词调用API trans=$(openai api completions.create -m text-davinci-003 -p "Translate $copied_text into English." | jq -r '.choices[0].text') echo "$trans"
2. 测试OpenAI API的原始输出
先单独执行API调用命令,验证返回的JSON是否合法:
# 先复制一段文本,然后执行以下命令 openai api completions.create -m text-davinci-003 -p "Translate \"$(xclip -o -sel c)\" into English."
如果输出不是标准JSON,说明提示词中的特殊字符(如引号、换行)未正确处理,需要进一步用jq转义(如上述代码中的jq -R .)。
3. 处理复制文本中的特殊字符
当复制的文本包含引号、空格或其他特殊符号时,会直接破坏提示词的结构,甚至导致API返回错误格式的内容。使用jq -R .可以将任意文本转义为合法的JSON字符串,确保传递给API的提示词格式正确。
内容的提问来源于stack exchange,提问作者nudzhy
相关产品推荐
相关产品推荐

