zoukankan      html  css  js  c++  java
  • 利用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脚本中的单引号和双引号一样都是字符串的界定符,而不是字符的界定符。

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

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

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

    • 反引号仍表示命令替换

    • $表示$的字面值

    • \`表示`的字面值

    • "表示"的字面值

    • \表示的字面值

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

  • 相关阅读:
    PHP中的list(),each(),reset()函数应用
    echo(),print(),print_r()
    Math.floor() 与 parseInt()
    利用Node.js轻松创建web服务器
    MySQL中Datetime与Timestamp
    修正正则匹配日期---基于网络未知大神的正则
    数据结构随笔-php实现栈
    数据结构随笔-php实现队列
    Js 获取时间戳
    linux 安装nginx+php+mysql
  • 原文地址:https://www.cnblogs.com/ivictor/p/5086802.html
Copyright © 2011-2022 走看看