小编MHo*_*gge的帖子

jq 操作后返回完整结果

我正在向 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)

jq

5
推荐指数
1
解决办法
1979
查看次数

以 UTF-8 编码的卷曲 JSON

重要说明:我正在使用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)

character-encoding cygwin unicode json

5
推荐指数
1
解决办法
3万
查看次数

bash使用带有jq的变量添加属性

要将属性添加到我设法使用的 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]没有成功。

bash quoting variable jq

3
推荐指数
1
解决办法
1万
查看次数

jq 变量的相等比较

我有一个运行 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 上运行它。

感谢您的进一步帮助!

bash variable jq

1
推荐指数
1
解决办法
2998
查看次数

标签 统计

jq ×3

bash ×2

variable ×2

character-encoding ×1

cygwin ×1

json ×1

quoting ×1

unicode ×1