首页 > 解决方案 > 是否有修复此表达式以正确获取键值对

问题描述

我有这个 python 脚本,它以原始字符串格式打印这个输出。

{"A":"ab3241c","B":"d12e31234f","c":"[g$x>Q)M&.N+v8"}

我正在使用 jq 来设置 A、B 和 c 的值

像这样的东西

expression='. | to_entries | .[] | .key + "=\"" + .value + "\""'
eval "$(python script.py | jq -r "$expression")"

这很好用A和B。当我做类似的事情时

echo $A
ab3241c

但问题在于 c 我得到的输出为

[g\u003eQ)M\u0026.N+v8

所以 $x> 和 & 正在转换为 unicode。我可以修复表达式以避免这种情况吗?

我使用表达式修复它

expression='to_entries | map("\(.key)=\(.value | @sh)") | .[]'

标签: jsonbashevaljq

解决方案


在这里使用eval就像在脚上射击自己。

为什么不直接将 python 命令的输出传递给 jq 命令呢?

考虑:

function mypython {
  cat <<"EOF"
{"A":"ab3241c","B":"d12e31234f","c":"[g$x>Q)M&.N+v8"}
EOF
}

expression='to_entries[] | .key + "=\"" + .value + "\""'

mypython | jq -r "$expression"

请注意,expression在这里使用似乎也毫无意义。一般来说,最好是“内联”它,或者将它放在一个文件中并使用 jq 的 -f 命令行选项。

(另请注意,expression不需要您的第一个“。”。)


推荐阅读