Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;无效的数字文字“;jq试图用变量修改JSON时出错_Json_Bash_Jq - Fatal编程技术网

&引用;无效的数字文字“;jq试图用变量修改JSON时出错

&引用;无效的数字文字“;jq试图用变量修改JSON时出错,json,bash,jq,Json,Bash,Jq,我希望将值导入bash脚本,该脚本将使用jq更改json文件中的值。我已经在这方面工作了一段时间,但我无法克服第一组错误 以下是我的简单json文件: { "0000000": { "pogo": "AJHVUYKJBOIHKNNLNM" }, "7000000": { "pogo": "PPPVUYKJBOIHKNNLNM" } } 这是我的剧本 #!/bin/bash #-- pass into script pgid="$

我希望将值导入bash脚本,该脚本将使用jq更改json文件中的值。我已经在这方面工作了一段时间,但我无法克服第一组错误

以下是我的简单json文件:

{
    "0000000": {
        "pogo": "AJHVUYKJBOIHKNNLNM"
    },
    "7000000": {
        "pogo": "PPPVUYKJBOIHKNNLNM"
    }
}
这是我的剧本

#!/bin/bash

#-- pass into script
pgid="${1}"
tpogo="${2}"
file="file.json"

#-- tmp files
tmp_dir="$(mktemp -d -t 'text.XXXXX' || mktemp -d 2>/dev/null)"
tmp_input1="${tmp_dir}/temp_input1.txt"

if [ ! -n "$2" ]; then
   { echo "Check your command as you are missing a variable ..."; echo "Example: script.sh "00000001" "jvkkjbkjbd" ..."; }
   exit 1;
fi

jq -r ".${pgid}.pogo = \"${tpogo}\"" "$file" > "$tmp_input1"
cat "$tmp_input1"
rm -rf "$tmp_dir"
以下是错误:

jq: error: Invalid numeric literal at EOF at line 1, column 9 (while parsing '.0000000.') at <top-level>, line 1:
.0000000.pogo = "XXXXXXX"
jq: error: syntax error, unexpected IDENT, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
.0000000.pogo = "XXXXXXX"
jq: 2 compile errors
jq:error:第1行第9列的EOF处的数值文字无效(在分析第1行的“.0000000.”时):
.0000000.pogo=“XXXXXXX”
jq:error:syntax error,意外的标识符,在第1行处应为$end(Unix shell引用问题?):
.0000000.pogo=“XXXXXXX”
jq:2个编译错误

我已经尝试了许多不同于stack的变体,其中大多数看起来与我现在所做的相似。

至于眼前的问题:
.key
{foo:“value”}
,但是
.100
{100:“value”}
不起作用;您所依赖的语法是sugar,仅适用于有限的密钥子集<代码>[“100”]可以工作,但是通过将shell变量扩展为解析为代码的字符串来生成代码是很脆弱的(
jq
在当前版本中不是一种副作用的语言,但是在支持I/O操作的语言中,这种替换可以用于注入攻击)。要以正确的方式进行操作,请将变量从代码带外传递,并以不依赖于其包含内容的方式使用它们进行查找


相当于awk的
-v var=“$value”
jq
--arg var“$value”
,用于:

jq --arg pgid "$pgid" \
   --arg tpogo "$tpogo" \
   '.[$pgid].pogo = $tpogo'

使用您的数据对此进行测试:

json='{"0000000":{"pogo":"AJHVUYKJBOIHKNNLNM"},"7000000":{"pogo":"PPPVUYKJBOIHKNNLNM"}}'
pgid="0000000"
tpogo="XXXXXXX"

jq --arg pgid "$pgid" --arg tpogo "$tpogo" \
   '.[$pgid].pogo = $tpogo' <<<"$json"

至于眼前的问题:
.key
{foo:“value”}
一起使用,但是
.100
{100:“value”}
不一起使用;您所依赖的语法是sugar,仅适用于有限的密钥子集<代码>[“100”]可以工作,但是通过将shell变量扩展为解析为代码的字符串来生成代码是很脆弱的(
jq
在当前版本中不是一种副作用的语言,但是在支持I/O操作的语言中,这种替换可以用于注入攻击)。要以正确的方式进行操作,请将变量从代码带外传递,并以不依赖于其包含内容的方式使用它们进行查找


相当于awk的
-v var=“$value”
jq
--arg var“$value”
,用于:

jq --arg pgid "$pgid" \
   --arg tpogo "$tpogo" \
   '.[$pgid].pogo = $tpogo'

使用您的数据对此进行测试:

json='{"0000000":{"pogo":"AJHVUYKJBOIHKNNLNM"},"7000000":{"pogo":"PPPVUYKJBOIHKNNLNM"}}'
pgid="0000000"
tpogo="XXXXXXX"

jq --arg pgid "$pgid" --arg tpogo "$tpogo" \
   '.[$pgid].pogo = $tpogo' <<<"$json"

这部分内容是重复的。@Barmar我这样做了。当然感谢你的帮助。这部分内容是重复的。@Barmar我这样做了,mate。当然感谢你的帮助。我确实看到了这一点,但当时对我来说没有多大意义,但现在有了意义。而且有必要打断你的命令吗?我确实看到了,但当时我觉得没什么意义,但现在有了。而且您的命令是否需要换行?