将 base64 图像字符串编码为 JSON 并使用 jq 将其解码回来
Encoding base64 image string into JSON and decoding it back using jq
我有这 3 个命令可以正常工作并将图像编码为 json。
encoded_string=$(base64 volunteers.jpg)
payload="{\"instances\": [{\"image\": {\"b64\": \"$encoded_string\"}}]}"
echo $payload >input.json
但是如何将它转换回jpg格式呢?这 returns 一个错误“base64:无效输入”
cat '/"' input.json '/"' | jq -r '.instances[0].image.b64' | base64 -d >output.jpg
问题很可能是由于在图像的编码部分创建的嵌入换行符造成的。您可以在最初的尝试中使用 tr -d \n
删除它们,然后使用 jq
从标准输入读取功能的输入进行稍微重写。
jq -Rn '.instances[0].image.b64 = inputs' < <(base64 volunteers.jpg | tr -d \n) > input.json
-n
部分是为了避免 jq
读取自己的单独输入流和 -R
读取原始输入。在这里,我们使用 bash
过程替换语法 <(..)
将编码内容提供给文件,就好像它在文件中一样,并将这个创建的文件提供给 jq
然后将创建的 JSON 解码回
jq -r '.instances[0].image.b64' input.json | base64 -d > output.jpg
重写您的原始尝试,但不使用临时文件来存储 JSON
JSON='{"instances": [{"image": {"b64": "'"$(base64 volunteers.jpg | tr -d \n)"'" }}]}'
jq -r '.instances[0].image.b64' <<<"$JSON" | base64 -d >output.jpg
或使用 printf()
代替此处的字符串 (<<<
)
printf '%s\n' "$JSON" | jq -r '.instances[0].image.b64' | base64 -d >output.jpg
调用
cat '/"' input.json '/"'
糊涂得无可救药:cat input.json
就够了。更好的是,假设 input.json 包含有效的 JSON,您可以这样写:
< input.json jq -r '.instances[0].image.b64' | base64 -d >output.jpg
我有这 3 个命令可以正常工作并将图像编码为 json。
encoded_string=$(base64 volunteers.jpg)
payload="{\"instances\": [{\"image\": {\"b64\": \"$encoded_string\"}}]}"
echo $payload >input.json
但是如何将它转换回jpg格式呢?这 returns 一个错误“base64:无效输入”
cat '/"' input.json '/"' | jq -r '.instances[0].image.b64' | base64 -d >output.jpg
问题很可能是由于在图像的编码部分创建的嵌入换行符造成的。您可以在最初的尝试中使用 tr -d \n
删除它们,然后使用 jq
从标准输入读取功能的输入进行稍微重写。
jq -Rn '.instances[0].image.b64 = inputs' < <(base64 volunteers.jpg | tr -d \n) > input.json
-n
部分是为了避免 jq
读取自己的单独输入流和 -R
读取原始输入。在这里,我们使用 bash
过程替换语法 <(..)
将编码内容提供给文件,就好像它在文件中一样,并将这个创建的文件提供给 jq
然后将创建的 JSON 解码回
jq -r '.instances[0].image.b64' input.json | base64 -d > output.jpg
重写您的原始尝试,但不使用临时文件来存储 JSON
JSON='{"instances": [{"image": {"b64": "'"$(base64 volunteers.jpg | tr -d \n)"'" }}]}'
jq -r '.instances[0].image.b64' <<<"$JSON" | base64 -d >output.jpg
或使用 printf()
代替此处的字符串 (<<<
)
printf '%s\n' "$JSON" | jq -r '.instances[0].image.b64' | base64 -d >output.jpg
调用
cat '/"' input.json '/"'
糊涂得无可救药:cat input.json
就够了。更好的是,假设 input.json 包含有效的 JSON,您可以这样写:
< input.json jq -r '.instances[0].image.b64' | base64 -d >output.jpg