コロンで区切られた値のペア(nmcli出力)を解析し、次からJSONに変換します。

コロンで区切られた値のペア(nmcli出力)を解析し、次からJSONに変換します。

私は書いたスクリプト出力を nmcli --mode multiline dev wifiJSONに変換しましたが、一貫性がありません。(結果にスペースがある場合は中断されます)、長くて読みにくいです。

結果を直接jq

出力nmcli(私のスクリプトへの入力)は次のとおりです。

*:                                       
SSID:                                   VIDEOTRON2255
MODE:                                   Infra
CHAN:                                   11
RATE:                                   54 Mbit/s
SIGNAL:                                 69
BARS:                                   ▂▄▆_
SECURITY:                               WPA1 WPA2
*:                                      * 
SSID:                                   VIDEOTRON2947
MODE:                                   Infra
CHAN:                                   6
RATE:                                   54 Mbit/s
SIGNAL:                                 49
BARS:                                   ▂▄__
SECURITY:                               WPA1 WPA2

次のようなものを作成したいと思います。

[{
    "network": "VIDEOTRON2255",
    "mode": "Infra",
    "chan": "11",
    "rate": "54 Mbit/s",
    "signal": "69",
    "bars": "▂▄▆_",
    "security": "WPA1 WPA2"
},
{
    "network": "VIDEOTRON2947",
    "mode": "Infra",
    "chan": "6",
    "rate": "54 Mbit/s",
    "signal": "49",
    "bars": "▂▄__",
    "security": "WPA1 WPA2"
}]

私は尋ねた関連質問より早く。これは最初のスクリプト元に書きました。ザイルズの答え。一部の値では機能しますが、securityスペースでは機能しませんrate

ベストアンサー1

あなたがリンクしたスクリプトは非常に非効率的です。使用されているモードで…役に立たない前処理をたくさんしています。
なぜならマニュアルによると、nmcli--terse「このモードはコンピュータ(スクリプト)処理用に設計されています。」、必須フィールドを指定し、出力をたとえばjq -sRパイプします。

printf '%s' "$(nmcli -f ssid,mode,chan,rate,signal,bars,security -t dev wifi)" | \
jq -sR 'split("\n") | map(split(":")) | map({"network": .[0],
                                             "mode": .[1],
                                             "channel": .[2],
                                             "rate": .[3],
                                             "signal": .[4],
                                             "bars": .[5],
                                             "security": .[6]})'

おすすめ記事