簡體   English   中英

將 bash output 轉換為 JSON

[英]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。 每行在一個空格上splitsplit參數可能需要根據實際輸入進行調整)。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM