欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言中常用json處理操作小結(jié)

 更新時間:2024年04月22日 09:54:33   作者:liulanba  
在?Go?中,你可以使用內(nèi)置的?encoding/json?包來處理?JSON?格式數(shù)據(jù),本文整理了一些常見的?JSON?處理操作,希望對大家有所幫助

在 Go 中,你可以使用內(nèi)置的 encoding/json 包來處理 JSON 格式數(shù)據(jù)。該包提供了函數(shù)和類型,使你能夠?qū)?JSON 數(shù)據(jù)解析為 Go 對象(反序列化)或?qū)?Go 對象轉(zhuǎn)換為 JSON 數(shù)據(jù)(序列化)。

下面是一些常見的 JSON 處理操作:

反序列化(解析 JSON)

使用 json.Unmarshal 函數(shù)將 JSON 數(shù)據(jù)解析為 Go 對象。該函數(shù)接受一個包含 JSON 數(shù)據(jù)的字節(jié)切片和一個指向目標(biāo) Go 對象的指針,并將 JSON 數(shù)據(jù)映射到指定的 Go 對象上。

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    jsonData := []byte(`{"name":"John", "age":30}`)
    var person Person
    err := json.Unmarshal(jsonData, &person)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Println("Name:", person.Name)
    fmt.Println("Age:", person.Age)
}

序列化(將 Go 對象轉(zhuǎn)換為 JSON)

使用 json.Marshal 函數(shù)將 Go 對象轉(zhuǎn)換為 JSON 數(shù)據(jù)。該函數(shù)接受一個 Go 對象,并返回表示該對象的 JSON 字節(jié)切片。

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    person := Person{
        Name: "John",
        Age:  30,
    }
    jsonData, err := json.Marshal(person)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Println(string(jsonData))
}

處理嵌套結(jié)構(gòu)和數(shù)組

在 Go 中,你可以使用結(jié)構(gòu)體嵌套和切片/數(shù)組來處理復(fù)雜的 JSON 數(shù)據(jù)結(jié)構(gòu)。通過在結(jié)構(gòu)體字段上添加 json 標(biāo)簽,可以指定 JSON 數(shù)據(jù)中的鍵名。

package main

import (
    "encoding/json"
    "fmt"
)

type Address struct {
    City  string `json:"city"`
    State string `json:"state"`
}

type Person struct {
    Name    string   `json:"name"`
    Age     int      `json:"age"`
    Address []Address `json:"address"`
}

func main() {
    jsonData := []byte(`{"name":"John", "age":30, "address":[{"city":"New York","state":"NY"},{"city":"San Francisco","state":"CA"}]}`)
    var person Person
    err := json.Unmarshal(jsonData, &person)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Println("Name:", person.Name)
    fmt.Println("Age:", person.Age)
    fmt.Println("Address:", person.Address)
}

以上示例展示了如何在 Go 中處理 JSON 數(shù)據(jù)。你可以根據(jù)實際需求定義自己的數(shù)據(jù)結(jié)構(gòu),并使用 json 標(biāo)簽進(jìn)行字段映射。

讀取 JSON 文件

  • 使用 os 和 io/ioutil 包來讀取 JSON 文件的內(nèi)容,并將其存儲為字節(jié)切片。
  • 使用 json.Unmarshal 函數(shù)將字節(jié)切片解析為 Go 對象。
package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "os"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    file, err := os.Open("data.json")
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    defer file.Close()

    jsonData, err := ioutil.ReadAll(file)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    var person Person
    err = json.Unmarshal(jsonData, &person)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Println("Name:", person.Name)
    fmt.Println("Age:", person.Age)
}

在上述示例中,我們打開名為 data.json 的 JSON 文件,并將其內(nèi)容讀取為字節(jié)切片。然后,我們使用 json.Unmarshal 將字節(jié)切片解析為 Person 對象。

寫入 JSON 文件

  • 使用 os 和 io/ioutil 包來創(chuàng)建或打開要寫入的 JSON 文件。
  • 使用 json.MarshalIndent 函數(shù)將 Go 對象轉(zhuǎn)換為帶縮進(jìn)的 JSON 字節(jié)切片。
  • 使用 ioutil.WriteFile 函數(shù)將 JSON 字節(jié)切片寫入 JSON 文件。
package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    person := Person{
        Name: "John",
        Age:  30,
    }

    jsonData, err := json.MarshalIndent(person, "", "  ")
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    err = ioutil.WriteFile("output.json", jsonData, 0644)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Println("JSON file created.")
}

在上述示例中,我們創(chuàng)建一個名為 output.json 的 JSON 文件,并將 Person 對象轉(zhuǎn)換為帶縮進(jìn)的 JSON 字節(jié)切片。然后,我們使用 ioutil.WriteFile 將 JSON 字節(jié)切片寫入文件。

到此這篇關(guān)于Go語言中常用json處理操作小結(jié)的文章就介紹到這了,更多相關(guān)Go json處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言基礎(chǔ)if條件語句用法及示例詳解

    Go語言基礎(chǔ)if條件語句用法及示例詳解

    這篇文章主要為大家介紹了Go語言基礎(chǔ)if條件語句的用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-11-11
  • 使用go在mangodb中進(jìn)行CRUD操作

    使用go在mangodb中進(jìn)行CRUD操作

    這篇文章主要介紹了使用go在mangodb中進(jìn)行CRUD操作,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • 一文教你Golang如何正確關(guān)閉通道

    一文教你Golang如何正確關(guān)閉通道

    Go在通道這一塊,沒有內(nèi)置函數(shù)判斷通道是否已經(jīng)關(guān)閉,也沒有可以直接獲取當(dāng)前通道數(shù)量的方法,因此如果對通道進(jìn)行了錯誤的使用,將會直接引發(fā)系統(tǒng)?panic,這是一件很危險的事情,下面我們就來學(xué)習(xí)一下如何正確關(guān)閉通道吧
    2023-10-10
  • Golang拾遺之實現(xiàn)一個不可復(fù)制類型詳解

    Golang拾遺之實現(xiàn)一個不可復(fù)制類型詳解

    在這篇文章中我們將實現(xiàn)一個無法被復(fù)制的類型,順便加深對引用類型、值傳遞以及指針的理解。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2023-02-02
  • Go工具鏈之go tool fix用法詳解

    Go工具鏈之go tool fix用法詳解

    go tool fix 是 Go 工具鏈中的一個命令,作用是把指定 Go 程序代碼包中的的所有舊版本代碼修正為新版本的代碼,本文將簡單介紹一下go tool fix的使用方法,感興趣的小伙伴可以參考閱讀下
    2023-07-07
  • go語言的變量定義示例詳解

    go語言的變量定義示例詳解

    這篇文章主要為大家介紹了go語言的變量定義示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • golang時間/時間戳的獲取與轉(zhuǎn)換實例代碼

    golang時間/時間戳的獲取與轉(zhuǎn)換實例代碼

    說實話,golang的時間轉(zhuǎn)化還是很麻煩的,最起碼比php麻煩很多,下面這篇文章主要給大家介紹了關(guān)于golang時間/時間戳的獲取與轉(zhuǎn)換的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • go?zero微服務(wù)實戰(zhàn)處理每秒上萬次的下單請求

    go?zero微服務(wù)實戰(zhàn)處理每秒上萬次的下單請求

    這篇文章主要為大家介紹了go?zero微服務(wù)實戰(zhàn)處理每秒上萬次的下單請求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Go語言中的字符串拼接方法詳情

    Go語言中的字符串拼接方法詳情

    本文介紹Go語言中的string類型、strings包和bytes.Buffer類型,介紹幾種字符串拼接方法的相關(guān)資料,需要的朋友可以參考一下,希望對你有所幫助
    2021-10-10
  • golang開啟mod后import報紅的簡單解決方案

    golang開啟mod后import報紅的簡單解決方案

    這篇文章主要給大家介紹了關(guān)于golang開啟mod后import報紅的簡單解決方案,文中通過圖文將解決的辦法介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01

最新評論