如何在 Shell 脚本中解析 json 并取出数据?

2021-12-17 15:18:48 +08:00
 LxnChan

有一段数据,需要在 shell 脚本中解析

{
  "access_token":"12345678-1234-1234-1234-123456789012",
  "token_type":"bearer",
  "refresh_token":"12345678-1234-1234-1234-12345678901"
}

需要获取access_tokenrefresh_token的值,但这两个值的长短不固定,请问大家有没有什么好方法能把这两个值从 json 中取出来并写入变量?

4159 次点击
所在节点    程序员
30 条回复
oneisall8955
2021-12-17 20:25:43 +08:00
正则,最小匹配
wuwukai007
2021-12-17 20:29:46 +08:00
python -m json.tools
sandylaw
2021-12-17 20:31:35 +08:00
cat json.txt|grep -oP '(?<=access_token":").*(?=")'
PrinceofInj
2021-12-17 21:13:38 +08:00
PowerShell 算不算 shell ?算的话原生支持
xabcstack
2021-12-17 23:09:50 +08:00
get_json_value(){
local json=$1
local key=$2

if [[ -z "$3" ]]; then
local num=1
else
local num=$3
fi

local value=$(echo "${json}" | awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/'${key}'\042/){print $(i+1)}}}' | tr -d '"' | sed -n ${num}p)
echo ${value}
}

![https://filelist.cn/disk/1/aP12Ao-axgmgBo.jpeg?key=61ba0de13408c603375522ed]( https://filelist.cn/disk/1/aP12Ao-axgmgBo.jpeg?key=61ba0de13408c603375522ed)

到底怎样才能评论输出图呢
Ryanjie
2021-12-18 04:46:30 +08:00
获取数据用 awk/grep +正则就行
skinny
2021-12-18 08:07:54 +08:00
如果能够确保数据格式 grep/sed 就可以了,python 也行,也一句就可以了,就是有点长。

access_token="$(echo "$json_data" | python -c 'import json, sys; print(json.load(sys.stdin)["access_token"])')"
nightwitch
2021-12-18 12:00:46 +08:00
直接调用 python ,用 shell 脚本的地方不会连 python 都没有吧。。
json 解析是 python 的标准库。

用 grep/awk/sed 之类的工具碰见以后格式变更了就歇菜了
neroxps
2021-12-18 12:10:01 +08:00
@nightwitch #28 目测是嵌入式开发之类,不可能有 python 了哈哈
LxnChan
2021-12-18 15:09:05 +08:00
@icepie 谢谢,学习了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/822821

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX