可以透過使用 gjson 函式庫或 json.Unmarshal 函數(shù)將 JSON 資料儲(chǔ)存到 MySQL 資料庫中。 gjson 函式庫提供了方便的方法來解析 JSON 字段,而 json.Unmarshal 函數(shù)需要一個(gè)目標(biāo)類型指標(biāo)來解組 JSON 資料。這兩種方法都需要準(zhǔn)備 SQL 語句和執(zhí)行插入操作來將資料持久化到資料庫中。
如何在Golang 中將JSON 資料保存到資料庫中
引言
在Golang中,將JSON 資料儲(chǔ)存到資料庫是一個(gè)常見任務(wù)。本文將探討使用常用資料庫(如 MySQL)將 JSON 資料持久化的不同方法,並提供實(shí)戰(zhàn)案例以供參考。
使用 gjson 函式庫
gjson 函式庫是一個(gè)流行的 Golang 包,用於解析和操作 JSON 資料。它提供了簡單的方法將 JSON 資料解析為 Go 資料結(jié)構(gòu),例如 map 和 slice。
package main import ( "database/sql" "encoding/json" "fmt" _ "github.com/go-sql-driver/mysql" "github.com/tidwall/gjson" ) func main() { db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database") if err != nil { panic(err) } defer db.Close() jsonData := `{ "name": "John Doe", "age": 30, "address": { "street": "Main Street", "city": "New York" } }` values := []interface{}{} // 解析 JSON 字段 name := gjson.Get(jsonData, "name").String() age := gjson.Get(jsonData, "age").Int() address := gjson.Get(jsonData, "address").String() values = append(values, name, age, address) // 準(zhǔn)備 SQL 語句 stmt, err := db.Prepare("INSERT INTO users (name, age, address) VALUES (?, ?, ?)") if err != nil { panic(err) } // 執(zhí)行插入操作 _, err = stmt.Exec(values...) if err != nil { panic(err) } fmt.Println("JSON data saved to database successfully") }
使用 json.Unmarshal
json.Unmarshal 函數(shù)是 Golang 標(biāo)準(zhǔn)函式庫的一部分,用於將 JSON 資料解組到 Go 變數(shù)中。此方法需要一個(gè)目標(biāo)類型指標(biāo)作為第二個(gè)參數(shù)。
package main import ( "database/sql" "encoding/json" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database") if err != nil { panic(err) } defer db.Close() jsonData := `{ "name": "John Doe", "age": 30, "address": { "street": "Main Street", "city": "New York" } }` var user struct { Name string Age int Address string } err = json.Unmarshal([]byte(jsonData), &user) if err != nil { panic(err) } // 準(zhǔn)備 SQL 語句 stmt, err := db.Prepare("INSERT INTO users (name, age, address) VALUES (?, ?, ?)") if err != nil { panic(err) } // 執(zhí)行插入操作 _, err = stmt.Exec(user.Name, user.Age, user.Address) if err != nil { panic(err) } fmt.Println("JSON data saved to database successfully") }
以上是如何在 Golang 中將 JSON 資料保存到資料庫中?的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Golang在並發(fā)性上優(yōu)於C ,而C 在原始速度上優(yōu)於Golang。 1)Golang通過goroutine和channel實(shí)現(xiàn)高效並發(fā),適合處理大量並發(fā)任務(wù)。 2)C 通過編譯器優(yōu)化和標(biāo)準(zhǔn)庫,提供接近硬件的高性能,適合需要極致優(yōu)化的應(yīng)用。

Oracle不僅是數(shù)據(jù)庫公司,還是雲(yún)計(jì)算和ERP系統(tǒng)的領(lǐng)導(dǎo)者。 1.Oracle提供從數(shù)據(jù)庫到雲(yún)服務(wù)和ERP系統(tǒng)的全面解決方案。 2.OracleCloud挑戰(zhàn)AWS和Azure,提供IaaS、PaaS和SaaS服務(wù)。 3.Oracle的ERP系統(tǒng)如E-BusinessSuite和FusionApplications幫助企業(yè)優(yōu)化運(yùn)營。

Golangisidealforbuildingscalablesystemsduetoitsefficiencyandconcurrency,whilePythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.Golang'sdesignencouragesclean,readablecodeanditsgoroutinesenableefficientconcurrentoperations,t

Redis是一種內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),主要用作數(shù)據(jù)庫、緩存和消息代理。它的核心特點(diǎn)包括單線程模型、I/O多路復(fù)用、持久化機(jī)制、復(fù)制與集群功能。Redis在實(shí)際應(yīng)用中常用于緩存、會(huì)話存儲(chǔ)和消息隊(duì)列,通過選擇合適的數(shù)據(jù)結(jié)構(gòu)、使用管道和事務(wù)、以及進(jìn)行監(jiān)控和調(diào)優(yōu),可以顯著提升其性能。

MongoDB的未來充滿可能性:1.雲(yún)原生數(shù)據(jù)庫發(fā)展,2.人工智能與大數(shù)據(jù)領(lǐng)域發(fā)力,3.安全性與合規(guī)性提升。 MongoDB在技術(shù)創(chuàng)新、市場地位和未來發(fā)展方向上不斷前進(jìn)和突破。

Redis在高並發(fā)和低延遲場景下優(yōu)於傳統(tǒng)數(shù)據(jù)庫,但不適合複雜查詢和事務(wù)處理。 1.Redis使用內(nèi)存存儲(chǔ),讀寫速度快,適合高並發(fā)和低延遲需求。 2.傳統(tǒng)數(shù)據(jù)庫基於磁盤,支持複雜查詢和事務(wù)處理,數(shù)據(jù)一致性和持久性強(qiáng)。 3.Redis適用於作為傳統(tǒng)數(shù)據(jù)庫的補(bǔ)充或替代,但需根據(jù)具體業(yè)務(wù)需求選擇。

Navicat的CommunityEdition和CommercialVersions的主要區(qū)別在於功能和使用場景。 CommunityEdition提供基礎(chǔ)的數(shù)據(jù)庫管理功能,適合基本需求;CommercialVersions則包含高級(jí)功能,如數(shù)據(jù)模型設(shè)計(jì)和自動(dòng)化任務(wù),適用於專業(yè)需求。

RSS選擇XML而不是JSON是因?yàn)椋?)XML的結(jié)構(gòu)化和驗(yàn)證能力優(yōu)於JSON,適合RSS複雜數(shù)據(jù)結(jié)構(gòu)的需求;2)XML當(dāng)時(shí)有廣泛的工具支持;3)RSS早期版本基於XML,已成標(biāo)準(zhǔn)。
