【发布时间】:2015-05-18 23:04:07
【问题描述】:
这是我需要解析的json:
{"protocol-config":[
{"protocol":"p1","config-var1":"vc1", "config-var2":"vc2"},
{"protocol":"p2","config-var1":"vc3", "config-var2":"vc4"}
]}
我要解析的代码如下:
declare -a vals=("var1" "var2")
for val in "${vals[@]}"; then
eval "result=($(cat $INPUT | jq -r --arg i "$i" --arg var "config-$val" '.protocol-config[$i | tonumber][$var]'))"
done
问题出在这部分:
jq -r --arg i "$i" --arg var "config-$val" '.protocol-config[$i | tonumber][$var]'
我无法得到它的值,我猜是因为我没有正确传递 $var?我也试过了
jq -r --arg i "$i" --arg var "config-$val" '.protocol-config[$i | tonumber][\"$var\"]'
但它不起作用..也许“config-$val”中的小“-”让它变得特别?所以我的问题是在 jq 中传递像“config-$val”这样的参数的正确方法是什么?
感谢任何帮助!非常感谢!
【问题讨论】:
-
您能否包括实际和预期的输出,而不是仅仅说“但它不起作用”?这段代码也有看似无关的问题:使用
then而不是do,没有定义$i,混合$REPLY和$input。你能先解决这些吗? (记住永远不要在运行和发布之间修改代码。修改应该总是在运行之前发生,这样发布的代码和结果是同步的) -
你把它弄得太复杂了。您要提取哪些值?我很确定它可以是一个班轮。
-
嗨 @hek2mgl 我需要提取 config-var1 和 config-var2。问题是,也许以后我需要提取 config2-var1, config2-var2, config3-var1, config3-var2 等,目前不存在。总而言之,'*-var1' 和 '*-var2'。
-
如果你只是想在 jq 命令中注入一个变量,使用这样的东西:
i=1; jq ".foobar$i" test.json