我有这个1-liner:
python -c 'import json,sys;obj=json.load(sys.stdin);print json.dumps(obj.get("dependencies"), indent=0, sort_keys=True)' < package.json
我想找到一个很好的简短解决方案,而不是重复自己,在["dependencies", "devDependencies", "peerDependencies"]
上进行打印循环。
我现在所拥有的琐碎但不太好的解决方案:
python -c 'import json,sys;obj=json.load(sys.stdin);print json.dumps(obj.get("dependencies"), indent=0, sort_keys=True);print json.dumps(obj.get("devDependencies"), indent=0, sort_keys=True);print json.dumps(obj.get("peerDependencies"), indent=0, sort_keys=True)' < package.json
我也尝试过类似的事情:
python -c 'import json,sys;obj=json.load(sys.stdin);[print json.dumps(obj.get(dep), indent=0, sort_keys=True) for dep in "dependencies","devDependencies","peerDependencies"]' < package.json
更新:
我的目标是获得所有具有&#34; git&#34;在他们的网址中:
输入:package.json:
{
"foo": "bar",
"dependencies": {
"a": "git:aa",
"b": "git:bb",
"c": "cc"
},
"peerDependencies": {
"p": "git:pp"
},
"devDependencies": {
"d": "git:dd"
},
"moo": "poo"
}
预期产出:
{
"a": "git:aa",
"b": "git:bb",
"c": "cc"
} {
"p": "git:pp"
} {
"d": "git:dd"
}
事实上,我并不太关心&#34;}&#34; -s和&#34; {&#34; -s,因为我将继续1-liner用:| grep 'git:'
答案 0 :(得分:2)
您正在寻找join
:
import json,sys
obj=json.load(sys.stdin)
print ' '.join(json.dumps(obj.get(dep), indent=0, sort_keys=True) for dep in ("dependencies", "devDependencies", "peerDependencies"))
答案 1 :(得分:2)
这不是一个单行,只是你让你的生活更艰难。你的1-liner可以简单如下:
python my-script.py
在文本文件中有一个很好的格式化代码,不会违背整个语言的精神:https://www.python.org/dev/peps/pep-0008/
现在关于你的问题:
import json, sys
deps = ["dependencies", "peerDependencies", "devDependencies"]
data = json.loads(sys.stdin)
for dep in deps:
if data[dep].startswith("git:"):
print data[dep]
我认为应该这样做,然后你不需要| grep
输出。
请注意,这是过滤依赖于START git:
的依赖项,而不是那些按照您的要求包含它的依赖项,因为我发现这就是您想要的。否则,您可以将if data[dep].startswith("git:")
替换为if "git:" in data[dep]
,这样就可以了。