Shell
如何將 shell 輸出轉換為 JSON?
我在下面有這個輸出,我正在嘗試將它轉換為 JSON api 格式。我想知道我該怎麼做。
rock64@rockpro64:~$ sh MACscript.sh eth0 11:1d:11:11:11:1d lo 00:00:00:00:00:00
我必須使用 python 腳本還是可以使用 shell 腳本?
這是我的 MACshell 腳本:
rock64@rockpro64:~$ cat MACscript.sh !/bin/bash getmacifup.sh: Print active NICs MAC addresses D='/sys/class/net' for nic in $( ls $D ) do echo $nic if grep -q unknown $D/$nic/operstate then echo -n ' ' cat $D/$nic/address fi done
使用普通的 bash 你可以這樣做:
json=$( sh MACscript.sh | { pairs=() while read interface; read ether; do pairs+=("\"$interface\":\"$ether\"") done IFS=, echo "{${pairs[*]}}" } ) echo "$json"
輸出
{"eth0":"11:1d:11:11:11:1d","lo":"00:00:00:00:00:00"}
您可以使用各種方法來獲取您的 json 值。bash、python、perl……
你可以在這個網站上找到關於這些的有用的文章。然而這裡是一個例子:
arr1=($( ls /sys/class/net)) arr2=($( cat /sys/class/net/*/address )) vars1=(${arr1[@]}) vars2=(${arr2[@]}) len=${#arr1[@]} printf "{\n" printf "\t"'"data"'":[\n" for (( i=0; i<len; i+=1 )) do printf "\t{ "'"{#interface}"'":\"${vars1[i]}\",\t"'"{#address}"'":\"${vars2[i]}\" }" if [ $i -lt $((len-1)) ] ; then printf ",\n" fi done printf "\n" printf "\t]\n" printf "}\n" echo
輸出:
{ "data":[ { "{#interface}":"eth0", "{#address}":"00:50:56:a9:c0:81" }, { "{#interface}":"lo", "{#address}":"00:00:00:00:00:00" } ] }
你可以使用這個網站來驗證你的 json:https ://codebeautify.org/online-json-editor