You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:17:27