簡體   English   中英

在 Golang 中解碼為結構的 JSON 標記

[英]JSON tag to decode into a struct in Golang

我有一個這樣的 JSON:

{
"add":[{"id": "1234ABCD"}, {"id": "5678EFGH"}]
}

我有一個這樣的結構:

type ExampleStruct struct {
    Added   []string
}

我想知道什么JSON標簽,我應該把我的結構,讓我做了JSON解碼(代碼這里沒有顯示),然后調用后exampleStruct := &ExampleStruct其次exampleStruct.Added ,我怎么能得到["1234ABCD", "5678EFGH"]

我嘗試這樣做:

type ExampleStruct struct {
    Added   []string `json:"add"`
}

但它沒有用。

使用地圖切片而不是字符串,因為您有字符串的鍵值對。

    type ExampleStruct struct {
        Added []map[string]string `json:"add"`
    }

這是一個完整的例子:

    package main

    import (
        "bytes"
        "encoding/json"
        "fmt"
    )

    func main() {
        const code = `{
    "add":[{"id": "1234ABCD"}]
    }`
        type ExampleStruct struct {
            Added []map[string]string `json:"add"`
        }
        var data ExampleStruct
        json.NewDecoder(bytes.NewReader([]byte(code))).Decode(&data)
        fmt.Println(data)
    }

編輯

由於您只想擁有地圖的值,這里有一個完整的示例,其中Added了一個可以在ExampleStruct上調用的ExampleStruct 它假設每個映射只包含兩個字符串(id 和 value):

    package main

    import (
        "bytes"
        "encoding/json"
        "fmt"
    )

    func main() {
        const code = `{
    "add":[{"id": "1234ABCD"}, {"id": "5678EFGH"}]
    }`
        var data ExampleStruct
        json.NewDecoder(bytes.NewReader([]byte(code))).Decode(&data)
        fmt.Println(data)
        fmt.Println(data.Added())
    }

    type ExampleStruct struct {
        Add []map[string]string `json:"add"`
    }

    func (e ExampleStruct) Added() []string {
        values := make([]string, len(e.Add))
        for i := range e.Add {
            for _, v := range e.Add[i] {
                values[i] = v
            }
        }
        return values
    }

您是否嘗試通過添加“id”來獲取其密鑰,就像這樣

類型 ExampleStruct struct { 添加 []string json:"add.id" }

您需要將json排列為可以直接訪問結構元素的方式(不要對其進行過度設計)。

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
)

type ExampleStruct struct {
    Add []struct {
        ID string `json:"id"`
    } `json:"add"`
}

func main() {

    const code = `{
     "add":[{"id": "1234ABCD"}, {"id": "5678EFGH"}]
    }`

     var data ExampleStruct
     json.NewDecoder(bytes.NewReader([]byte(code))).Decode(&data)
     fmt.Println(data)           //Get all ids: {[{1234ABCD} {5678EFGH}]}
     fmt.Println(data.Add[0].ID) //Get 1st ID : 1234ABCD
     fmt.Println(data.Add[1].ID) //Get 2nd ID ... and so on.: 5678EFGH
}

你可以在這里找到代碼https://play.golang.org/p/7tD4fLBewp

如果數組中有很多ids ,那么您還可以編寫一個函數來循環遍歷數組,即data.Add並從中獲取 id。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM