我正在向 JSON 字符串添加一个属性
result=$(jq -c ".docs[$docIndex] + { \"value\": \"value\" }"<<<"$fileContent")
Run Code Online (Sandbox Code Playgroud)
凡JSON里面$fileContent
是
{
"docs": [
{
"id": 123
},
{
"id": 456
},
{
"id": 678
},
...
]
}
Run Code Online (Sandbox Code Playgroud)
但是$result
我手术后里面的东西是{"id:123", "value":"value"}
. 如何返回完整输出?我想要的是结果变成
{
"docs": [
{
"id": 123,
"value": "value"
},
{
"id": 456
},
{
"id": 678
},
...
]
}
Run Code Online (Sandbox Code Playgroud) 重要说明:我正在使用Cygwin
我从我更改的文件中检索 JSON,然后使用curl
. 现在一切正常,除了一件事,当服务器收到 JSON 时,每个特殊字符(带有重音符号等)都没有得到很好的编码。我想这是因为我的 JSON 在发送之前没有用 UTF-8 编码,但我没有设法转换它。
这是代码:
sed -i 's/\r//g' $file
fileContent=`cat $file`
result=$(jq -c -j ".docs[$docIndex] + { \"_rev\": \"$rev\" }"<<<"$fileContent") result="{\"docs\":[$result]}"
result=$result | sed 's/\r//g'
result=$result | iconv -t "UTF-8"
s=$(curl -H "Content-Type: application/json; charset=UTF-8" -H "Cache-Control: no-cache" -d "$result" $2/$3/_bulk_docs --silent)
Run Code Online (Sandbox Code Playgroud)
我的 bash 脚本和我的 JSON 文件都以 UTF-8 编码。我的 LANG 变量似乎是 UTF-8。我检查了这个:[[ $LANG =~ UTF-8$ ]] && echo "Uses UTF-8 encoding.."
任何的想法?
更新
这是完整的脚本:
#!/bin/bash
# $1 = directory …
Run Code Online (Sandbox Code Playgroud) 要将属性添加到我设法使用的 JSON 文本
result=$(jq -c '.docs[0] + { "value": "someValue" }'<<<"$fileContent")
Run Code Online (Sandbox Code Playgroud)
但是如果我想用一个变量替换“someValue”:
result=$(jq -c '.docs[0] + { "value": ($value) }'<<<"$fileContent")
Run Code Online (Sandbox Code Playgroud)
这给了我
jq: error: value/0 is not defined at <top-level>, line 1:
.docs[0] + { "value": ($value) }
jq: 1 compile error
Run Code Online (Sandbox Code Playgroud)
我也试过没有大括号$value
和括号内[$value]
没有成功。
我有一个运行 curl 请求并通过 jq 输出状态的 bash 脚本。我得到了预期的状态,但是当我比较状态时,它总是返回“不相等”的值,即使值相等(或看起来如此)。
这是脚本:
status=( $(curl -H "Content-Type: application/json" -H "Authorization: Basic xxx==" -H "Cache-Control: no-cache" --data-binary "@$entry" $2/$3/_bulk_docs --silent | jq '.[0].status'))
echo $status
if [ "$status" = "409" ]
then
echo "Conflict"
else
echo "No Conflict"
fi
Run Code Online (Sandbox Code Playgroud)
正如我所料,它在控制台中打印了 409。
我在装有 Cygwin 的 Windows 10 PC 上运行它。
感谢您的进一步帮助!