首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Shell 腳本將 MySQL 表數據轉 JSON 格式:動態構建 SELECT 語句與單雙引號轉義技巧

     編輯:MySQL 綜合教學

Shell 腳本將 MySQL 表數據轉 JSON 格式:動態構建 SELECT 語句與單雙引號轉義技巧

一、腳本核心邏輯

  1. DESC table 獲取欄位名
  2. 動態拼接 CONCAT_WS 表達式,構建 JSON 字串:{"col1":"val1","col2":"val2"}
  3. 處理 NULL 與空字串 → 輸出 null(無引號)
  4. 最後一欄補上結尾 }

二、完整腳本

#!/bin/bash
mysql -s -phello test > 1.log <

三、測試數據與輸出

表 t1:

+------+-------+
| id   | name  |
+------+-------+
| 1    |       |
| 1    | NULL  |
| 2    | hello |
+------+-------+

腳本產出的 SQL 片段:

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 執行:

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"} |
+---------------------------+

四、Shell 引號轉義核心技巧

引號類型特性典型陷阱
單引號 '...'保持所有字符字面值,含 \、換行、$、反引號。不能嵌套單引號變數不展開、命令替換不執行
雙引號 "..."保持字面值,但 $var、\`cmd\`、\$、\`、\"、\\ 保留特殊含義需轉義內層雙引號:\"

腳本中關鍵轉義說明

  • '{\"$col\"}':外層單引號保護整體,內層 \" 在單引號中屬字面值,最終傳給 MySQL 為 {"id"}
  • concat('\"',\$col,'\"'):MySQL 字串拼接雙引號包裹欄位值
  • \$col:Shell 層轉義 $,防止 Shell 展開,保留 $col 交給 MySQL 解析為欄位引用

五、改進建議

  • 生產環境建議使用 jq、Python json 模組或 MySQL 5.7+ 內建 JSON_OBJECT()、JSON_ARRAYAGG() 直接輸出標準 JSON
  • 腳本僅供舊版本 MySQL 或無額外工具環境下應急使用
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved