首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

JSON 數據入庫三種模式:解析入表、整體存文本、存儲過程解析

     編輯:程式設計疑難解答

問題釐清

「將 JSON 數據傳入數據庫」有三種常見理解,方案截然不同:

模式一:解析後逐字段入表(最常見)

  • 流程:前端/客戶端 → JSON 字符串 → 後端解析為對象/Map → 逐字段構建 SQL 插入。
  • 技術:各語言成熟庫(Jackson/Gson、Jackson、Newtonsoft.Json、PHP json_decode、Python json.loads)。
  • 優點:結構化存儲、利於索引查詢、符合范式。
  • 缺點:需維護表結構與 JSON Schema 一致。

模式二:整體存為 JSON 文本/二進制(NoSQL 風格)

  • MySQL 5.7+ JSON 型別、PostgreSQL jsonb、SQL Server 2016+ NVARCHAR(MAX) 存文本。
  • 優點:Schema 靈活、無需遷移、適合日志/審計/異構數據。
  • 缺點:查詢性能較差、無法直接建立傳統索引(MySQL 支持虛擬列索引)。

模式三:存儲過程內部解析(少見)

  • 將 JSON 字符串作為參數傳給存儲過程,在 SP 中用數據庫內置函數解析(MySQL JSON_EXTRACT、PG jsonb_path_query、SQL Server OPENJSON)。
  • 優點:減少網絡交互、邏輯下沉。
  • 缺點:調試困難、耦合業務邏輯、可移植性差。

代碼示例:Java + Gson + JDBC 批量入庫

String json = "[{\"name\":\"張三\",\"age\":25},{\"name\":\"李四\",\"age\":30}]";
List users = new Gson().fromJson(json, new TypeToken<List<User>>(){}.getType());

String sql = "INSERT INTO users(name,age) VALUES(?,?)";
try (Connection c = ds.getConnection(); PreparedStatement ps = c.prepareStatement(sql)) {
    c.setAutoCommit(false);
    for (User u : users) {
        ps.setString(1, u.getName());
        ps.setInt(2, u.getAge());
        ps.addBatch();
    }
    ps.executeBatch();
    c.commit();
}

選型建議

  • 結構固定、高頻查詢 → 模式一(關係表)。
  • 結構多變、全量讀寫、日志審計 → 模式二 (JSON 型別)。
  • 極簡場景、DBA 主導、數據庫原生能力強 → 模式三。

總結

沒有銀彈,根據業務查詢模式、數據結構穩定性、團隊技術棧選擇。現代項目常採用「關係表核心字段 + JSON 擴展字段」混合模式兼顧性能與靈活性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved