脚本如下:
#!/bin/bashMysqL -s -phello test >1.log <<EOFdesc t1;EOFlines="concat_ws(',',"count=`cat 1.log|wc -l`linenum=0while read linedo coloumname=`echo $line |awk '{print }'` let linenum=linenum+1 if [ $linenum -eq 1 ];then lines=$linesconcat_ws(':','{"''$coloumname'"',if("$coloumname is null or $coloumname='','null',concat('')))" elif [ $linenum -eq $count ];,concat_ws(':','null}',1)">}'))))else" fidone < 1.logecho $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='',1)">nullID,1)">'))),1)">"name"if(name is null or name=null}"}'))))
在MysqL中执行的结果如下:
MysqL> select concat_ws()))) Json_format from t1;+---------------------------+| Json_format |+---------------------------+| {ID":1",1)">name":null} || {2hello"} |+---------------------------+0.00 sec)
技巧:关于shell脚本中单引号和双引号的区别
shell脚本中的单引号和双引号一样都是字符串的界定符,而不是字符的界定符。
单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号。(注意是所有,只是单引号本身不能够出现在其中)。
双引号用于保持引号内所有字符的字面值(回车也不例外),但以下情况除外:
$加变量名可以取变量的值
反引号仍表示命令替换
\$表示$的字面值
\`表示`的字面值
\"表示"的字面值
\\表示\的字面值
除以上情况之外,在其它字符前面的\无特殊含义,只表示字面值。
总结以上是内存溢出为你收集整理的利用Shell脚本将MySQL表中的数据转化为json格式全部内容,希望文章能够帮你解决利用Shell脚本将MySQL表中的数据转化为json格式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)