Bash、管道解析和格式化json(精简)
我有一个bash脚本,它输出一个json,如下所示:Bash、管道解析和格式化json(精简),json,linux,macos,bash,unix,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...... } 我想在我的脚本中通过管道发送一个新命令,以返回最终的js
{
"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"
}
}
如何在不安装新工具/lib(如jq等)的情况下实现这一点
有线索吗
如何在不安装新工具/库(如jq等)的情况下实现这一点。。
有线索吗
好吧,打个比方,就像你在问“我怎样才能成为100米短跑的世界冠军,但我没有腿,我不想要假腿”。简单的答案是,你不能,或者如果你这样做了,它将不会是灵活和通用的,足以成为真正有用的
编写shell脚本就像拥有一个工具箱,里面有许多工具,每个工具都被设计用来完成一项任务并将其做好。因此,如果你拒绝使用可能适合你需要的工具,那么你就不能这样做
因此,正确的方法是使用工具,如jq
,或小型python/ruby/。。。将从json数据中取出密钥的脚本
如何在不安装新工具/库(如jq等)的情况下实现这一点。。
有线索吗
好吧,打个比方,就像你在问“我怎样才能成为100米短跑的世界冠军,但我没有腿,我不想要假腿”。简单的答案是,你不能,或者如果你这样做了,它将不会是灵活和通用的,足以成为真正有用的
编写shell脚本就像拥有一个工具箱,里面有许多工具,每个工具都被设计用来完成一项任务并将其做好。因此,如果你拒绝使用可能适合你需要的工具,那么你就不能这样做
因此,正确的方法是使用工具,如
jq
,或小型python/ruby/。。。脚本,该脚本将从json数据中取出密钥。我知道您已规定在不使用外部工具的情况下执行此操作,但希望这将改变您的想法:
jq '{ name, env, dd }' file.json
那很容易
快速而肮脏的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") })
它可以像
pythonscript.py file.json
那样运行。为了改进格式,您可以将额外的参数传递给json.dumps
()。我知道您已经规定在不使用外部工具的情况下执行此操作,但希望这会改变您的想法:
jq '{ name, env, dd }' file.json
那很容易
快速而肮脏的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") })
它可以像
pythonscript.py file.json
那样运行。为了改进格式,您可以将额外的参数传递给json.dumps
()。所以基本上只使用bash编写json解析器?以您想要的格式输出json不是更容易吗?不管怎样,你都不应该在json形成后弄乱它。问题是json包含许多我不需要的键,我只是想用一个新命令来缩小它,因为有时候它可能是MB@Marc Bso。。。同样,为什么不首先修复构建json的脚本呢?你不会去杂货店,买整个商店的存货,然后把它运回家,然后到处翻找,扔掉除了你想要的胡萝卜以外的所有东西。jq
是一个独立的可执行文件,因此它实际上不需要安装。我想说这是适合这项工作的工具。@Marc B因为不是我写的脚本,它是一个外部工具,我实际上无法触摸它,所以基本上只使用bash编写json解析器?以您想要的格式输出json不是更容易吗?不管怎样,你都不应该在json形成后弄乱它。问题是json包含许多我不需要的键,我只是想用一个新命令来缩小它,因为有时候它可能是MB@Marc Bso。。。同样,为什么不首先修复构建json的脚本呢?你不会去杂货店,买整个商店的存货,然后把它运回家,然后到处翻找,扔掉除了你想要的胡萝卜以外的所有东西。jq
是一个独立的可执行文件,因此它实际上不需要安装。我想说这是适合这份工作的工具。@Marc B因为这不是我写的脚本,它是一个外部工具,我无法触摸它。我在osx Yosemite上,我得到jq:command not found
我不会安装任何链接到下载页面的东西。我真的认为这是最好的方式。Ofc是最好的,但不是我想要的:(安装,然后你只需要执行brew安装jq
就可以了。@sbaaang我添加了一个简单的python选项,你可以选择。我在osx Yosemite上,我得到jq:command not found
我不会安装任何我链接到下载页面的东西。我真的认为这是最好的方式。Ofc是最好的,但不是o。)我正在寻找的ne:(安装,然后你只需要执行brew安装jq
,你就可以得到它了。@sbaaang我添加了一个简单的python选项,你可以选择。没有腿听起来有很多限制:像jq
这样的Pno工具听起来也有很多限制:-)EHHEHH,但是,这个脚本必须运行在客户机上,我不能安装新的工具,你会考虑做shell脚本并摆脱<代码> GRP,<代码> SED还是<代码>剪切<代码>?等等,然后带着脚本带上工具,或者在Python中执行它(默认情况下它有一个JSON解析器模块)。没有腿听起来有很多限制:像jq
这样的Pno工具听起来也有很多限制:-)EHHEHH,但是,这个脚本必须运行在客户机上,我不能安装新的工具,你会考虑做shell脚本并摆脱<代码> GRP,<代码> SED还是<代码>剪切<代码>?等等,然后带着脚本带上工具,或者在Python中执行它(默认情况下它有一个JSON解析器模块)。