带有base64的Google Speech bash脚本:意外标记。\n

带有base64的Google Speech bash脚本:意外标记。\n,bash,base64,google-speech-api,Bash,Base64,Google Speech Api,我使用以下代码: 适合我自己的bash脚本 cat <<EOF > $JSONFILENAME { "config": { "encoding":"LINEAR16", "sampleRateHertz":8000, "languageCode": "nl-NL", "speechContexts": { "phrases": [''] }, "maxAlternatives": 1 }, "audio":

我使用以下代码: 适合我自己的bash脚本

cat <<EOF > $JSONFILENAME
{
  "config": {
    "encoding":"LINEAR16",
    "sampleRateHertz":8000,
    "languageCode": "nl-NL",
    "speechContexts": {
      "phrases": ['']
    },
    "maxAlternatives": 1
  },
  "audio": {
    "content":
    }
}
EOF
base64 $1 -w 0 > $SOUNDFILE.base64
#MYBASE64=$(base64 $1 -w 0)
sed -i $JSONFILENAME -e "/\"content\":/r $SOUNDFILE.base64"
#sed -i $JSONFILENAME -e "/\"content\":/r $MYBASE64"
curl -s -X POST -H "Content-Type: application/json" --data-binary @${JSONFILENAME} https://speech.googleapis.com/v1/speech:recognize?key=$API_KEY

如何确保JSON对象中的“内容”是base64的连续字符串?

您应该避免使用
sed
更新JSON数据

如果您有有效的JSON数据(即您必须修复行
“短语”:[]
“内容”:“
”,您可以使用
jq

jq ".audio.content = \"$(base64 -w 0 "$1")\"" "$JSONFILENAME"

我不建议使用
sed
,但在这种情况下,如果必须附加一个大条目,您可以尝试以下方法:

echo \"$(base64 -w 0 "$1")\" > "$SOUNDFILE.base64"
sed -i "$JSONFILENAME" -e "/\"content\":/r $SOUNDFILE.base64"

您收到的google错误可能是由于字符串没有双引号。

尝试了此操作,但得到的错误:/usr/bin/jq:参数列表太长。因此,这与我在尝试我的替代方法时遇到的问题相同:MYBASE64=$(base64$1-w 0)@user2795648您的base64字符串相当长……请尝试此:
jq--arg a“$(base64-w 0”$1”)“'.audio.content=$a'
@user2795648或者您可以使用
jq--argfile a“$SOUNDFILE.base64”'.audio.content=$a'
无解决方案。第一种情况:获取相同的“参数列表太长”。第二种情况:“jq:未知选项--argfile”是的,base64很长。这是一个10秒的声音文件。预期是几分钟的声音文件!我已经尝试在sed命令中添加双引号…但是使用echo \“\”的解决方案非常好!
echo \"$(base64 -w 0 "$1")\" > "$SOUNDFILE.base64"
sed -i "$JSONFILENAME" -e "/\"content\":/r $SOUNDFILE.base64"