Bash,管道解析和格式json(瘦下来)

时间:2016-03-10 16:33:14

标签: json linux macos bash unix

我有一个bash脚本输出一个像这样的json:

 {
    "name": "some",
    "desc": "this is a desc",
    "env": "this is an env type",
    "dd": {
        "one": "rr",
        "two": "aa"
    },
    "url": "http://someurl",
    //etc......
}

我想在我的脚本中输出一个新命令,将最终的json输出返回为:

{
    "name": "some",
    "env": "this is an env type",
    "dd": {
        "one": "rr",
        "two": "aa"
    }
}

如何在不安装jq 等新工具/库的情况下实现

有任何线索吗?

2 个答案:

答案 0 :(得分:2)

我知道你已经规定你在没有外部工具的情况下这样做但希望这会改变你的想法:

jq '{ name, env, dd }' file.json

这很简单!

jq is very easy to obtain

一个快速而又脏的python脚本也可以工作:

import sys
import json

with open(sys.argv[1]) as file:
    obj = json.load(file)
    print json.dumps({ key: obj[key] for key in ("name", "env", "dd") })

它可以像python script.py file.json一样运行。要改进格式,您可以将额外的参数传递给json.dumpssee the docs)。

答案 1 :(得分:0)

  

如何在不安装jq等新工具/库的情况下实现这一目标。   任何线索?

嗯,打个比方就好像你在问“我怎样才能成为100米冲刺跑的世界冠军,但我没有腿,我不想假腿”。简单的答案是你不能,或者如果你这样做,它将不够灵活和通用,不足以真正有用。

执行shell脚本就像拥有一个工具箱,其中包含许多工具,每个工具都设计为执行一项任务并且做得很好。因此,如果您拒绝可能适合您需要的工具,那么您就无法做到。

因此,正确的方法是使用jq或小型python / ruby​​ / ...脚本等工具来获取json数据中的密钥。