[英]Convert bash output to JSON
我正在運行以下命令:
sudo clustat | grep primary | awk 'NF{print $1",""server:"$2 ",""status:"$3}'
結果是:
service:servicename,server:servername,status:started
service:servicename,server:servername,status:started
service:servicename,server:servername,status:started
service:servicename,server:servername,status:started
service:servicename,server:servername,status:started
我想要的結果是:
{"service":"servicename","server":"servername","status":"started"}
{"service":"servicename","server":"servername","status":"started"}
{"service":"servicename","server":"servername","status":"started"}
{"service":"servicename","server":"servername","status":"started"}
{"service":"servicename","server":"servername","status":"started"}
我似乎無法在我的 output 上加引號。
使用jq
:
sudo clustat | grep primary |
jq -R 'split(" ")|{service:.[0], server:.[1], status:.[2]}'
輸入被讀取為原始文本,而不是JSON。 每行在一個空格上split
( split
參數可能需要根據實際輸入進行調整)。 jq
確保在構造輸出對象時正確引用值。
不要這樣做:而是使用@ chepner's answer ,它保證生成具有所有可能輸入的有效JSON作為輸出(或者,如果沒有JSON表示形式,則以非零退出狀態失敗)。
以下只進行測試,以與該問題所示的特定輸入有效的JSON,並會相當肯定產生的輸出, 是不是與許多可能的輸入(與文字引號中的字符串,在文字反斜杠結尾的字符串,等等),有效的JSON。
sudo clustat |
awk '/primary/ {
print "{\"service\":\"" $1 "\",\"server\":\"" $2 "\",\"status\":\""$3"\"}"
}'
對於普通shell命令的JSON轉換, jc(JSON Convert)是一個不錯的選擇
不過,目前還沒有clustat
的解析器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.