利用Shell脚本将MySQL表中的数据转化为json格式

脚本如下:

复制代码
#!/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脚本中的单引号和双引号一样都是字符串的界定符,而不是字符的界定符。

单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号。(注意是所有,只是单引号本身不能够出现在其中)。

双引号用于保持引号内所有字符的字面值(回车也不例外),但以下情况除外:

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

  • 反引号仍表示命令替换

  • \$表示$的字面值

  • \`表示`的字面值

  • \"表示"的字面值

  • \\表示\的字面值

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

posted @   iVictor  阅读(5517)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示