作者:前前后后zzyyix | 来源:互联网 | 2023-05-25 12:33
我有一个不带分隔符,
的JSON字符串。如何使用jq
进行解析?
$echo '{"access_token":"XXXX""expires_in":300"token_type":"Bearer"}' | jq -r .access_token
上面的行给我下面的错误:
parse error: Expected separator between values at line 1
我知道问题是因为提供的JSON字符串未用逗号分隔。但这就是我从服务器得到的响应。如何解析这样的字符串?我想检索键"access_token"
的值。
如果您知道访问令牌中不包含引号,则可以对sed
使用正则表达式。
echo '{"access_token":"XXXX""expires_in":300"token_type":"Bearer"}' |
sed 's/"access_token":"\([^"]*\)/\1/'
\(
和\)
之间的捕获组捕获引号之间的字符串,替换字符串中的\1
提取它。
,
这里有两个Just-jq解决方案,每个解决方案都有其自己的脆弱性。第一个尝试将每条完整的输入行转换为有效的JSON:
使用fromjson
echo '{"access_token":"XXXX""expires_in":300"token_type":"Bearer"}' |
jq -rR 'gsub("(?\"[^\"]*\")"; "," + .k )
| gsub("{,\"";"{\"") | gsub(":,\""; ":\"")
| fromjson | .access_token'
XXXX
假设值是同一行上的字符串
jq -rR 'sub(".*\"access_token\" *: *\"(?[^\"]*)\".*"; .v )'