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

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

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

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

    • 反引号仍表示命令替换

    • $表示$的字面值

    • \`表示`的字面值

    • "表示"的字面值

    • \表示的字面值

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

  • 相关阅读:
    机器学习: 基于MRF和CNN的图像合成
    概率论经典问题 —— 三个事件 A、B、C 独立 ≠ 三个事件两两独立
    概率论经典问题 —— 三个事件 A、B、C 独立 ≠ 三个事件两两独立
    中国文化史
    中国文化史
    详解第一个CUDA程序kernel.cu
    【读书笔记】 —— 历史篇
    【读书笔记】 —— 历史篇
    美国政府、部门构成及其运作
    实时抢占补丁概观(待续)
  • 原文地址:https://www.cnblogs.com/ivictor/p/5086802.html
Copyright © 2020-2023  润新知