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

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

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

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

    • 反引号仍表示命令替换

    • $表示$的字面值

    • \`表示`的字面值

    • "表示"的字面值

    • \表示的字面值

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

  • 相关阅读:
    动态更新活动条件
    使用本地服务异步执行自定义活动业务逻辑
    隐藏自定义复合活动的内部实现
    如何开发一个基本的复合活动
    HTML5性能之争 —— 单线程:缺点还是特点?
    CDNJS —— Web 上最快的 JavaScript 资源库
    Comfusion 4.1 发布,桌面 Linux 发行
    FreeBSD 9.1 正式版已经可以下载
    Squid Analyzer 5.0 发布,Squid日志统计
    MemSQL 1.8 发布,号称最快的关系数据库
  • 原文地址:https://www.cnblogs.com/ivictor/p/5086802.html
Copyright © 2020-2023  润新知