在shell中我有一个要求,其中我必须阅读JSON响应,其格式如下:
{ "Messages": [ { "Body": "172.16.1.42|/home/480/1234/5-12-2013/1234.toSort", "ReceiptHandle": "uUk89DYFzt1VAHtMW2iz0VSiDcGHY+H6WtTgcTSgBiFbpFUg5lythf+wQdWluzCoBziie8BiS2GFQVoRjQQfOx3R5jUASxDz7SmoCI5bNPJkWqU8ola+OYBIYNuCP1fYweKl1BOFUF+o2g7xLSIEkrdvLDAhYvHzfPb4QNgOSuN1JGG1GcZehvW3Q/9jq3vjYVIFz3Ho7blCUuWYhGFrpsBn5HWoRYE5VF5Bxc/zO6dPT0n4wRAd3hUEqF3WWeTMlWyTJp1KoMyX7Z8IXH4hKURGjdBQ0PwlSDF2cBYkBUA=", "MD5OfBody": "53e90dc3fa8afa3452c671080569642e", "MessageId": "e93e9238-f9f8-4bf4-bf5b-9a0cae8a0ebc" } ] }
Run Code Online (Sandbox Code Playgroud)
在这里,我只关注"Body"属性值.我做了一些不成功的尝试,如:
jsawk -a 'return this.Body'
Run Code Online (Sandbox Code Playgroud)
要么
awk -v k="Body" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}
Run Code Online (Sandbox Code Playgroud)
但这还不够.谁能帮我这个?
use*_*398 82
有jq
在命令行上解析JSON:
jq '.Body'
Run Code Online (Sandbox Code Playgroud)
访问jq:https://stedolan.github.io/jq/
Édo*_*pez 12
$ cat /tmp/so.json | underscore select '.Messages .Body'
["172.16.1.42|/home/480/1234/5-12-2013/1234.toSort"]
Run Code Online (Sandbox Code Playgroud)
您可以使用Javascript CLI工具
选择a的所有name
孩子addons
:
underscore select ".addons > .name"
Run Code Online (Sandbox Code Playgroud)
在underscore-cli
为他人提供现实世界的例子还有JSON:选择()文档.
同样使用Bash regexp.应该能够抢夺任何键/值对.
key="Body"
re="\"($key)\": \"([^\"]*)\""
while read -r l; do
if [[ $l =~ $re ]]; then
name="${BASH_REMATCH[1]}"
value="${BASH_REMATCH[2]}"
echo "$name=$value"
else
echo "No match"
fi
done
Run Code Online (Sandbox Code Playgroud)
可以调整正则表达式以匹配多个空格/制表符或换行符.如果价值已嵌入,则无效"
.这是一个例证.最好使用一些"工业"解析器:)
归档时间: |
|
查看次数: |
168939 次 |
最近记录: |