最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

下面是一些常見(jiàn)的 JSON 處理操作:

反序列化(解析 JSON)

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

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 對(duì)象轉(zhuǎn)換為 JSON)

使用 json.Marshal 函數(shù)將 Go 對(duì)象轉(zhuǎn)換為 JSON 數(shù)據(jù)。該函數(shù)接受一個(gè) Go 對(duì)象,并返回表示該對(duì)象的 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ù)組來(lái)處理復(fù)雜的 JSON 數(shù)據(jù)結(jié)構(gòu)。通過(guò)在結(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í)際需求定義自己的數(shù)據(jù)結(jié)構(gòu),并使用 json 標(biāo)簽進(jìn)行字段映射。

讀取 JSON 文件

  • 使用 os 和 io/ioutil 包來(lái)讀取 JSON 文件的內(nèi)容,并將其存儲(chǔ)為字節(jié)切片。
  • 使用 json.Unmarshal 函數(shù)將字節(jié)切片解析為 Go 對(duì)象。
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)
}

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

寫(xiě)入 JSON 文件

  • 使用 os 和 io/ioutil 包來(lái)創(chuàng)建或打開(kāi)要寫(xiě)入的 JSON 文件。
  • 使用 json.MarshalIndent 函數(shù)將 Go 對(duì)象轉(zhuǎn)換為帶縮進(jìn)的 JSON 字節(jié)切片。
  • 使用 ioutil.WriteFile 函數(shù)將 JSON 字節(jié)切片寫(xiě)入 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)建一個(gè)名為 output.json 的 JSON 文件,并將 Person 對(duì)象轉(zhuǎn)換為帶縮進(jìn)的 JSON 字節(jié)切片。然后,我們使用 ioutil.WriteFile 將 JSON 字節(jié)切片寫(xiě)入文件。

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

相關(guān)文章

  • Go語(yǔ)言struct類(lèi)型詳解

    Go語(yǔ)言struct類(lèi)型詳解

    這篇文章主要介紹了Go語(yǔ)言struct類(lèi)型詳解,struct是一種數(shù)據(jù)類(lèi)型,可以用來(lái)定義自己想的數(shù)據(jù)類(lèi)型,需要的朋友可以參考下
    2014-10-10
  • Go語(yǔ)言自定義linter靜態(tài)檢查工具

    Go語(yǔ)言自定義linter靜態(tài)檢查工具

    這篇文章主要介紹了Go語(yǔ)言自定義linter靜態(tài)檢查工具,Go語(yǔ)言是一門(mén)編譯型語(yǔ)言,編譯器將高級(jí)語(yǔ)言翻譯成機(jī)器語(yǔ)言,會(huì)先對(duì)源代碼做詞法分析,詞法分析是將字符序列轉(zhuǎn)換為T(mén)oken序列的過(guò)程,文章詳細(xì)介紹需要的小伙伴可以參考一下
    2022-05-05
  • golang int64轉(zhuǎn)int的方法

    golang int64轉(zhuǎn)int的方法

    這篇文章主要介紹了golang int64轉(zhuǎn)int,本文給大家提供兩種方法 ,將 golang int64 轉(zhuǎn)換為golang int,結(jié)合實(shí)例代碼給大家分享轉(zhuǎn)換方法,需要的朋友可以參考下
    2023-01-01
  • 淺析Go使用定時(shí)器時(shí)如何避免潛在的內(nèi)存泄漏陷阱

    淺析Go使用定時(shí)器時(shí)如何避免潛在的內(nèi)存泄漏陷阱

    這篇文章來(lái)和大家一起探討一下Go?中如何高效使用?timer,特別是與select?一起使用時(shí),如何防止?jié)撛诘膬?nèi)存泄漏問(wèn)題,感興趣的可以了解下
    2024-01-01
  • 詳解如何熱重啟golang服務(wù)器

    詳解如何熱重啟golang服務(wù)器

    這篇文章主要介紹了詳解如何熱重啟golang服務(wù)器,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Go中string與[]byte高效互轉(zhuǎn)的方法實(shí)例

    Go中string與[]byte高效互轉(zhuǎn)的方法實(shí)例

    string與[]byte經(jīng)常需要互相轉(zhuǎn)化,普通轉(zhuǎn)化會(huì)發(fā)生底層數(shù)據(jù)的復(fù)制,下面這篇文章主要給大家介紹了關(guān)于Go中string與[]byte高效互轉(zhuǎn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Go語(yǔ)言實(shí)現(xiàn)Kafka消息隊(duì)列的示例代碼

    Go語(yǔ)言實(shí)現(xiàn)Kafka消息隊(duì)列的示例代碼

    本文主要介紹了Go語(yǔ)言實(shí)現(xiàn)Kafka消息隊(duì)列的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • golang解析yaml文件操作

    golang解析yaml文件操作

    這篇文章主要介紹了golang解析yaml文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 深入淺出Golang中的sync.Pool

    深入淺出Golang中的sync.Pool

    sync.Pool是可伸縮的,也是并發(fā)安全的,其大小僅受限于內(nèi)存大小。本文主要為大家介紹一下Golang中sync.Pool的原理與使用,感興趣的小伙伴可以了解一下
    2023-03-03
  • 聊聊Golang性能分析工具pprof的使用

    聊聊Golang性能分析工具pprof的使用

    對(duì)于線上穩(wěn)定運(yùn)行的服務(wù)來(lái)說(shuō),?可能會(huì)遇到?cpu、mem?利用率升高的問(wèn)題,那我們就需要使用?pprof?工具來(lái)進(jìn)行性能分析,所以本文就來(lái)和大家講講pprof的具體使用吧
    2023-05-05

最新評(píng)論

绥滨县| 仪征市| 清徐县| 潢川县| 横山县| 洱源县| 陕西省| 邛崃市| 华蓥市| 浦城县| 望江县| 时尚| 上虞市| 七台河市| 塔河县| 西盟| 萨嘎县| 高唐县| 资源县| 天台县| 隆化县| 拉孜县| 五大连池市| 遂溪县| 瑞安市| 清镇市| 西乌珠穆沁旗| 南皮县| 合江县| 宁城县| 石棉县| 阳曲县| 新野县| 灵台县| 灵璧县| 陕西省| 苏尼特右旗| 房山区| 广州市| 龙陵县| 花莲市|