V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wsgzao
V2EX  ›  程序员

使用 Bash Shell 处理 JSON 文件

  •  
  •   wsgzao ·
    wsgzao · 2015-06-19 15:41:11 +08:00 · 10584 次点击
    这是一个创建于 2783 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。本文提供一个真实的测试用例需求,设计逻辑类似Makefile,我以Bash处理JSON为例,Coding水平有限,请各位多多包涵哈,欢迎大家一起学习和挑战各种不同的语言来实现。

    巧用jq处理JSON数据


    更新历史

    2015年06月19日 - 初稿

    阅读原文 - http://wsgzao.github.io/post/bash-json/

    扩展阅读

    22 条回复    2015-06-20 13:34:11 +08:00
    Hawk
        1
    Hawk  
       2015-06-19 16:27:17 +08:00
    楼主 blog theme能fork吗
    Hawk
        2
    Hawk  
       2015-06-19 16:36:53 +08:00
    没点过去看 不好意思
    wsgzao
        3
    wsgzao  
    OP
       2015-06-19 16:38:34 +08:00
    @Hawk 没事
    cxl008
        4
    cxl008  
       2015-06-19 16:40:40 +08:00
    还以为是纯bash,多用了个 jq 是神马?
    ChiangDi
        5
    ChiangDi  
       2015-06-19 16:49:49 +08:00
    我也以为是 bash ,原来是 bash 调用 jq...
    wsgzao
        6
    wsgzao  
    OP
       2015-06-19 17:03:42 +08:00
    @cxl008 我一开始想使用Python 3编写,但刚开始学习@廖雪峰的Python 3教程,快速学习的功力还不够深,Bash本身也可以处理但使用`sed, awk, grep`等命令或显得很复杂,通过Stack OverFlow找到jq的方法不错就复用了
    celon
        7
    celon  
       2015-06-19 17:32:25 +08:00
    bash下的 jq 很好用,用这个写了一套操作bitcoin的脚本
    Hawk
        8
    Hawk  
       2015-06-19 17:38:30 +08:00
    @wsgzao https://pypi.python.org/pypi/jq/0.1.3
    已经有了python实现的jq
    wsgzao
        9
    wsgzao  
    OP
       2015-06-19 20:05:19 +08:00
    @Hawk 非常感谢哈
    zodiac1111
        10
    zodiac1111  
       2015-06-19 21:50:03 +08:00
    bash的来了... [Pure-shell JSON parser](https://github.com/rcrowley/json.sh)
    小.只是parser.有在ash上用的.安利一下.
    lululau
        11
    lululau  
       2015-06-19 22:06:00 +08:00   ❤️ 1
    jq 怎么成 bash 下的了,明明是 zsh 下的啊
    shizukoto
        12
    shizukoto  
       2015-06-19 22:41:40 +08:00
    此外还可以用 https://www.npmjs.com/package/json ,常用的取属性操作等非常方便。而且基于 nodejs ,单文件、无依赖项。

    echo '{"fred":{"age":42}}' | json fred.age
    cattail
        13
    cattail  
       2015-06-19 22:55:30 +08:00   ❤️ 1
    > 易于人阅读和编写

    笑过
    lilydjwg
        14
    lilydjwg  
       2015-06-19 23:00:34 +08:00
    jq 很强大,不过要新学一种 mini-language。如果需求非常简单的话,可以考虑 jshon 命令,功能很有限,但是用法也非常简单。
    ekousp
        15
    ekousp  
       2015-06-19 23:41:36 +08:00
    文中的 json 只是个测试用例,作者写的程序不符合需求。
    Arthur2e5
        16
    Arthur2e5  
       2015-06-20 00:05:24 +08:00 via Android
    表示有个 bash 库叫做 https://github.com/ingydotnet/json-bash
    Arthur2e5
        17
    Arthur2e5  
       2015-06-20 00:10:38 +08:00 via Android
    唔不过 jq 很厉害的样子…毕竟是门小语言了。

    另外楼上那个纯 POSIX 的 json parser 也挺有意思…
    Mutoo
        18
    Mutoo  
       2015-06-20 00:41:22 +08:00
    支持 json5 么。。http://json5.org/
    ys0290
        19
    ys0290  
       2015-06-20 00:50:34 +08:00 via iPhone
    用bash处理dnspod的json返回结果,把我弄吐血了,所以干脆用大牛的方案改了改😂
    Septembers
        20
    Septembers  
       2015-06-20 07:44:56 +08:00 via Android
    @lilydjwg 我在Bash里用Python处理JSON
    lilydjwg
        21
    lilydjwg  
       2015-06-20 10:18:00 +08:00
    @Mutoo 这个好赞,不过有多少支持呢?
    wsgzao
        22
    wsgzao  
    OP
       2015-06-20 13:34:11 +08:00
    @ekousp 嗯,我文章最后也写了问题,欢迎大家使用自己擅长的语言写出更优质的代码哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   1707 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 13:22 · PVG 21:22 · LAX 05:22 · JFK 08:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.