Bash中提取json中的某个字段的值

先推荐一下最近看到的一个学习Perl的好地方: Perl 程序员应该知道的事, LinuxToy的大大们翻译的, 很不错.

正文

最近有个需求: 希望修改已有的bash脚本, 记录从远端获取的json的某个值到某个日志中. 在Bash脚本中做这样的事情确实让人有点蛋疼, 不过有些东西终究是得做的, 所以想想办法吧.

提取内容

一般处理文字都会想到sedawk, 但是个人认为提取文本内容其实最合适的是grep. grep有个-o选项可以仅仅输出匹配到得内容, 这正是再合适不过的了;) 同时由于类型的原因, 我们还需要用sed处理一下引号.

这里吐槽下这几个工具的正则, 好多差异…..

注意点

写代码的时候发现自己还是不怎么会bash啊. 第一点就是变量. 假如保存在$var中的值为1 2 3, 如果在传递函数参数时不加引号的话只会传递第一个值. 另外一点就是引号在反引号中的使用. 自己总结的话就是: 无视反引号, 该怎样还是怎样.

最后的代码

简易的代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash

function get_v() {
    local json=$1
    local key=$2

    vvv=`grep -o "\"$key\"\s*:\s*\"\?[0-9]\+\"\?" <<<"$json" | sed -n -e 's/"//gp' | awk -F':' '{print $2}'`
}

json='{"code": "1", "result" :12345}'

get_v "$json" 'result'

echo $vvv

get_v "$json" 'code'

echo $vvv

PPPPSSSS

I feel a little boring …

Comments