2016-11-27 13 views
0

循環我有這1班輪:1襯爲在python

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 

UPDATE:

我的目標是讓所有的依賴在他們的網址中有「git」:

輸入: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" 
} 

其實我不那麼在意 「}」 - S和 「{」 -s,因爲我會繼續1班輪: | grep 'git:'

+0

你能告訴我們你期望的輸出嗎? – ettanany

+4

用分號而不是換行符分隔線條並不真正使它成爲單線。 –

+1

你試過什麼問題?請具體說明。 –

回答

2

您正在尋找join

​​
2

這不是1套,這只是你讓你的生活困難。你的1班輪可以簡單:

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的輸出。 請注意,這是篩選依賴關係,開始於git:,而不是包含您請求的那些,因爲我知道這就是您想要的。否則,你可以用if "git:" in data[dep]代替if data[dep].startswith("git:"),那樣做。