爱意满满的作品展示区。
ryncsn

小作品:写了一个完全用 POSIX Shell 实现的迷你 JSON 解析器

  •  1
     
  •   ryncsn ·
    ryncsn · Oct 31, 2021 · 4128 views
    This topic created in 1675 days ago, the information mentioned may be changed or developed.
    起因是希望在路由器上去用脚本调用一些 REST 服务,但是 shell 中没有解析 JSON 的好方法,又不想再安装额外的 binary 了,现有的纯 Shell 的 JSON 解析器都非常长,于是写了个很短的 POSIX Shell 的 JSON 解析器。

    特点是:
    - 很短,可以直接粘贴在脚本里用(目标是 60 行以下)
    - 兼容性强,只用了 POSIX 语法和 sed 。
    - 提供基本的错误处理。

    地址: https://github.com/ryncsn/poorjson.sh

    使用方法就是:
    # Just pipe JSON to it, and use parameters to query:
    # (Note strings are quoted with "")
    echo '{"key": ["ele1", "ele2", "ele3", "ele4"]}' | ./poorjson.sh '"key"' 2
    # Prints:
    # "ele3"

    # If output is array or object, it's printed a token per line
    echo '{"top-key": {"key1": [ "value1", "value2"], "key2": "value2"} }' | ./poorjson.sh '"top-key"' '"key1"'
    # Prints:
    # [
    # "value1"
    # ,
    # "value2"
    # ]

    刚刚出炉,用于在 shell 脚本里提取 JSON 中的一些值非常方便。
    不确定有没有什么问题,比如忘记 cover JSON 什么语法,应该有不少可以改进的地方,自己初步试了一下感觉还可以,欢迎尝试...
    14 replies    2022-04-16 13:59:05 +08:00
    ch2
        1
    ch2  
       Oct 31, 2021   ❤️ 1
    一般我是用 python 的
    version=$(python3 -c "import json; print(json.load(open('package.json'))['version'],end='')")
    iamzuoxinyu
        2
    iamzuoxinyu  
       Oct 31, 2021   ❤️ 1
    jq 它不香么。
    Nasei
        3
    Nasei  
       Oct 31, 2021   ❤️ 1
    可以把 shell 换成 powershell (逃
    ryncsn
        4
    ryncsn  
    OP
       Oct 31, 2021 via Android
    @ch2
    @iamzuoxinyu
    主要是是在一些特殊环境里,除了 shell 几乎啥都没有,这个工具可能有些用途。
    deplivesb
        5
    deplivesb  
       Oct 31, 2021
    有 jq 不香么
    neilp
        6
    neilp  
       Oct 31, 2021   ❤️ 1
    这个要赞.
    ryncsn
        7
    ryncsn  
    OP
       Oct 31, 2021 via Android
    @neilp 哇,大佬,一直在用你的 acme.sh 。👍
    byte404
        8
    byte404  
       Oct 31, 2021   ❤️ 1
    可以 确实有很大的用途,我这里很多机器都是不通外网 没有源库
    garywill
        9
    garywill  
       Oct 31, 2021   ❤️ 1
    60 行以下就搞定了的确不错。jq 在电脑上看了下,带上依赖可能要 700k 空间
    Senorsen
        10
    Senorsen  
       Oct 31, 2021   ❤️ 1
    强啊,感觉在一些资源紧张的地方会比较有用。

    顺便,建议用这个测试集做单元测试覆盖: https://github.com/nst/JSONTestSuite
    ryncsn
        11
    ryncsn  
    OP
       Oct 31, 2021
    @Senorsen 非常感谢,正想找有没有什么比较好的 JSON 测试集,帮了大忙了。
    ryncsn
        12
    ryncsn  
    OP
       Oct 31, 2021
    @Senorsen 简单修了一下,现在基本都能 cover 到了( •̀ ω •́ )y ,和 JSON.sh 和 Python 对比了一下,除了一些特殊字符问题应该都可以了。
    ![Screenshot.png]( https://i.loli.net/2021/10/31/svK4IiEa82CwB6b.png)
    hljjhb
        13
    hljjhb  
       Nov 1, 2021
    赞,的确会有这个需求
    quericy
        14
    quericy  
       Apr 16, 2022   ❤️ 1
    棒,刚好有这样的需求
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3867 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 70ms · UTC 05:04 · PVG 13:04 · LAX 22:04 · JFK 01:04
    ♥ Do have faith in what you're doing.