热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

使用jq解析不带分隔符的JSON字符串假设值是同一行上的字符串

我有一个不带分隔符,的JSON字符串。如何使用jq进行解析?$echo&#

我有一个不带分隔符,的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 )'

推荐阅读
author-avatar
前前后后zzyyix
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有