2010-10-12 76 views
4

可能重複:
Parsing json with sed and awk解析JSON與shell腳本在Linux的

我有一個JSON字符串,如下面的例子,我想用,例如,值了「正常運行時間」命令作爲shell腳本中的變量,我該怎麼辦?

{ 「serverStatus」:{ 「版本」: 「1.6.0」, 「運行時間」:527, 「uptimeEstimate」:526, 「本地時間」:{ 「$日期」:1286923624579}, 「globalLock」 :{「totalTime」:526604302,「lockTime」:3499842,「ratio」:0.006646056605895331,「currentQueue」:{「total」:0,「readers」:0,「writers」:0}},「mem」:{ 「位」:64,「居民」:150,「虛擬」:76114,「支持」:真,「映射」:75950},「連接」:{「當前」:1,「可用」:9599} EXTRA_INFO」:{ 「注」: 「田因平臺而異」, 「heap_usage_bytes」:600592, 「page_faults」:1838}, 「indexCounters」 ......

+0

由於缺乏一個bash,CSH,zsh中,tcsh所等庫在列入http:// json.org/ - 寫一個圖書館並提供它? – Quentin 2010-10-12 23:13:20

+0

@skaffman編輯戰爭!!! ;-) – Josh 2010-10-12 23:13:45

+2

@Josh:你所有的編輯都屬於我們。 – skaffman 2010-10-12 23:17:28

回答

6

可以使用一種編程語言使用JSON模塊,或者如果你願意殼+ * nix的工具解決方案,您可以使用它使用AWK

$ awk -F"[,:]" '{for(i=1;i<=NF;i++){if($i~/uptime\042/){print $(i+1)} } }' file 
527 
+0

在他的示例json中正常運行時間值正常工作。但不適用於像HTML代碼這樣的值。 – VMcPherron 2014-04-07 21:36:12

+0

這對我有效..謝謝 – Neethu 2015-02-21 01:18:54

+0

糾正我,如果我錯了,你的例子中顯示的一個是子字符串比較。如果循環檢查$ i是否等於正常運行時間應該使用什麼條件。 – Neethu 2015-02-21 18:04:40

1

版本紅寶石:

cat file | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['serverStatus']['uptime'];"