MENU

A POSIX Compatible JSON Parser Written in AWK and Shell

2022 年 02 月 05 日 • 阅读: 2457 • 脚本

Intro

AWKShell 写了个简单的 JSON 解析器,初衷是方便我在路由器上编写 Shell 脚本。总大小 8KPOSIX 兼容,几乎可以运行于所有 *nix 系统。但因为性能不高,也没有做严格测试,如果不是设备空间不足不要使用。

它的功能远没有知名项目 jq 强大,只能做字段提取,语法类似 JavaScript 访问对象属性。

$ DOH_API='https://dns.alidns.com/resolve?name=dns.google&type=AAAA'
$ JQ_URI='https://ghproxy.com/https://raw.githubusercontent.com/vch'\
'eckzen/posix-awk-shell-jq/main/jq.sh'
$ curl -s "$DOH_API" | sh -c "$(curl -sL "$JQ_URI")" @ - 'Answer[0].data'
"2001:4860:4860::8888"#

Details

以下是实现思路:首先通过下表规则确定值类型,k 为键名,

类型区分
nullk 后首个冒号后首个非空白字符是 n
布尔k 后首个冒号后首个非空白字符是 t/f
数字k 后首个冒号后首个非空白字符是 数字
字符串k 后首个冒号后首个非空白字符是 "
对象k 后首个冒号后首个非空白字符是 {
数组k 后首个冒号后首个非空白字符是 [
数组元素k 形如 [num]

接着根据类型分别找到起始字符,null布尔 已由上一步确定。

类型开始结束备注
数字k 后首个数字下个非数字nullable
字符串k 后首个 "下个非转义 "nullable
对象k 后首个 {下个非嵌套对象内且非转义 }nullable,可跨行
数组k 后首个 [下个非嵌套数组内且非转义 ]nullable,可跨行
数组元素idx=0,[ 后;
idx!=0,idx 个非嵌套对象内及非字符 , 后,
首个非空白字符
下个非嵌套对象内及非转义 ,]nullable,可跨行

最后,如果这个项目对你有帮助,请到 Github 上为我点颗星。如果在使用过程中遇到问题,也欢迎在页面下方留言。

TG 大佬群 QQ 大佬群

返回文章列表 文章二维码
本页链接的二维码
打赏二维码
添加新评论

Loading captcha...