亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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ù)和類型,使你能夠?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ǔ)言 swagger 查詢 json 字段注釋的示例代碼

    go語(yǔ)言 swagger 查詢 json 字段注釋的示例代碼

    在Go語(yǔ)言中,使用Swagger通過(guò)swag工具和gin-gonic框架生成API文檔,涉及引入依賴、定義模型、添加注釋等步驟,示例中展示了如何為接受查詢參數(shù)的API端點(diǎn)添加注釋,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • go語(yǔ)言base64加密解密的方法

    go語(yǔ)言base64加密解密的方法

    這篇文章主要介紹了go語(yǔ)言base64加密解密的方法,實(shí)例分析了Go語(yǔ)言base64加密解密的技巧,需要的朋友可以參考下
    2015-03-03
  • win10下安裝Go和Goland的詳細(xì)教程

    win10下安裝Go和Goland的詳細(xì)教程

    這篇文章主要介紹了win10下安裝Go和Goland的詳細(xì)教程,本文給大家提到了go和golang之間的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • golang bufio包中Write方法的深入講解

    golang bufio包中Write方法的深入講解

    這篇文章主要給大家介紹了關(guān)于golang bufio包中Write方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之插入排序示例詳解

    Go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之插入排序示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之插入排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • CGO編程基礎(chǔ)快速入門

    CGO編程基礎(chǔ)快速入門

    這篇文章主要為大家介紹了CGO編程基礎(chǔ)快速入門示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Golang 并發(fā)編程入門Goroutine 簡(jiǎn)介與基礎(chǔ)用法小結(jié)

    Golang 并發(fā)編程入門Goroutine 簡(jiǎn)介與基礎(chǔ)用法小結(jié)

    Goroutine 是 Golang 中的一種輕量級(jí)線程,用于實(shí)現(xiàn)并發(fā)操作,與傳統(tǒng)線程相比,Goroutine 的優(yōu)勢(shì)在于它具有更低的資源消耗和更高的效率,本文介紹Golang 并發(fā)編程入門Goroutine 簡(jiǎn)介與基礎(chǔ)用法小結(jié),感興趣的朋友一起看看吧
    2024-11-11
  • 談?wù)凣o語(yǔ)言的反射三定律

    談?wù)凣o語(yǔ)言的反射三定律

    本文中,我們將解釋Go語(yǔ)言中反射的運(yùn)作機(jī)制。每個(gè)編程語(yǔ)言的反射模型不大相同,很多語(yǔ)言索性就不支持反射(C、C++)。由于本文是介紹Go語(yǔ)言的,所以當(dāng)我們談到“反射”時(shí),默認(rèn)為是Go語(yǔ)言中的反射。
    2016-08-08
  • Golang實(shí)現(xiàn)HTTP代理突破IP訪問(wèn)限制的步驟詳解

    Golang實(shí)現(xiàn)HTTP代理突破IP訪問(wèn)限制的步驟詳解

    在當(dāng)今互聯(lián)網(wǎng)時(shí)代,網(wǎng)站和服務(wù)商為了維護(hù)安全性和保護(hù)用戶隱私,常常會(huì)對(duì)特定的IP地址進(jìn)行封鎖或限制,本文將介紹如何使用Golang實(shí)現(xiàn)HTTP代理來(lái)突破IP訪問(wèn)限制,需要的朋友可以參考下
    2023-10-10
  • Go語(yǔ)言基礎(chǔ)數(shù)組用法及示例詳解

    Go語(yǔ)言基礎(chǔ)數(shù)組用法及示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)Go語(yǔ)言數(shù)組的用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11

最新評(píng)論