使用openwrt从json字符串中获取键和值

使用openwrt从json字符串中获取键和值,json,bash,openwrt,Json,Bash,Openwrt,我正在用很少的shell命令检查openwrt,看看是否可以过滤json字符串以获得值 比如说 {地址:192.168.2.2,用户:user1,组:权限} 我从curl接收字符串,需要分离值以将变量传递给其他命令 现在我正在检查一些示例,但不起作用 #!/bin/sh . /usr/share/libubox/jshn.sh json_init json_load '$(cat $STRING)' json_get_keys keys for k in $keys; do json_

我正在用很少的shell命令检查openwrt,看看是否可以过滤json字符串以获得值

比如说 {地址:192.168.2.2,用户:user1,组:权限}

我从curl接收字符串,需要分离值以将变量传递给其他命令

现在我正在检查一些示例,但不起作用

#!/bin/sh
. /usr/share/libubox/jshn.sh 
json_init
json_load '$(cat $STRING)'
json_get_keys keys
for k in $keys; do 
   json_get_var v "$k"
   echo "$k : $v"
done
但生成错误无法分析消息数据

我的问题是我没有使用jq或python来选择数据,所以唯一的解决方案是先分离


建议?

我发现其他形式也可以这样做

eval $(jsonfilter -s $STRING -e 'ADDRESS=@.address' -e 'USER=@.user')
echo "address=$ADDRESS user=$USER"

有了这个表单,我可以过滤每个参数的值,而无需jq或python函数

“$cat$STRING”未展开,因此您正在尝试将$cat$STRING解析为JSON对象。那是什么json_负载?JSON数据最有可能不作为参数传递,而是以其stdinThank@Aaron为真,正确的是$echo$RESPONSE现在只需过滤生成的行user:user1以选择all after user:You应该在$STRING周围添加双引号,否则它将在包含空格的JSON数据上中断。如果它不在引号中,则将其展开,然后拆分为IFS分隔的标记,其中第一个标记假定与您的-s选项关联,如果它在双引号中,则展开,但被视为单个标记,如果它在单引号中,则不展开,并被视为单个标记。