Shell

如何將 shell 輸出轉換為 JSON?

  • December 3, 2018

我在下面有這個輸出,我正在嘗試將它轉換為 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

引用自:https://unix.stackexchange.com/questions/484149