程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 利用Shell腳本將MySQL表中的數據轉化為json格式,mysqljson

利用Shell腳本將MySQL表中的數據轉化為json格式,mysqljson

編輯:MySQL綜合教程

利用Shell腳本將MySQL表中的數據轉化為json格式,mysqljson


腳本如下:

#!/bin/bash
mysql -s -phello test >1.log <<EOF
desc t1;
EOF
lines="concat_ws(',',"
count=`cat 1.log|wc -l`
linenum=0
while read line
do
 coloumname=`echo $line |awk '{print $1}'`
 let linenum=linenum+1
  if [ $linenum -eq 1 ];then
    lines=$lines"concat_ws(':','{"'"'$coloumname'"'"',if("$coloumname" is null or $coloumname='','null',concat('"'"'"',$coloumname,'"'"'"')))"
 elif [ $linenum -eq $count ];then
    lines=$lines",concat_ws(':','"'"'$coloumname'"'"',if("$coloumname" is null or $coloumname='','null}',concat('"'"'"',$coloumname,'"'"'"}'))))"
 else
    lines=$lines",concat_ws(':','"'"'$coloumname'"'"',if("$coloumname" is null or $coloumname='','null',concat('"'"'"',$coloumname,'"'"'"')))"
  fi
done < 1.log
echo $lines

表t1中的數據如下:

mysql> select * from t1;
+------+-------+
| id   | name  |
+------+-------+
|    1 |       |
|    1 | NULL  |
|    2 | hello |
+------+-------+
3 rows in set (0.00 sec)

腳本執行的結果如下:

concat_ws(',',concat_ws(':','{"id"',if(id is null or id='','null',concat('"',id,'"'))),concat_ws(':','"name"',if(name is null or name='','null}',concat('"',name,'"}'))))

在MySQL中執行的結果如下:

mysql> select concat_ws(',',concat_ws(':','{"id"',if(id is null or id='','null',concat('"',id,'"'))),concat_ws(':','"name"',if(name is null or name='','null}',concat('"',name,'"}')))) json_format from t1;
+---------------------------+
| json_format               |
+---------------------------+
| {"id":"1","name":null}    |
| {"id":"1","name":null}    |
| {"id":"2","name":"hello"} |
+---------------------------+
3 rows in set (0.00 sec)

 

技巧:關於shell腳本中單引號和雙引號的區別

shell腳本中的單引號和雙引號一樣都是字符串的界定符,而不是字符的界定符。

單引號用於保持引號內所有字符的字面值,即使引號內的\和回車也不例外,但是字符串中不能出現單引號。(注意是所有,只是單引號本身不能夠出現在其中)。

雙引號用於保持引號內所有字符的字面值(回車也不例外),但以下情況除外:

  • $加變量名可以取變量的值

  • 反引號仍表示命令替換

  • \$表示$的字面值

  • \`表示`的字面值

  • \"表示"的字面值

  • \\表示\的字面值

  • 除以上情況之外,在其它字符前面的\無特殊含義,只表示字面值。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved