首頁  >  文章  >  後端開發  >  將部分資料位元組解組到自訂結構中

將部分資料位元組解組到自訂結構中

王林
王林轉載
2024-02-12 18:20:06461瀏覽

將部分資料位元組解組到自訂結構中

問題內容

我有map[string][]byte 形式的數據,其中key 是該結構體的json 欄位標記, value 是位元組切片。

考慮這個例子:

type Tweet struct {
    UserId int `json:"user_id"`
    Message string `json:"message"`
}
data = {
"user_id":<some bytes>,
"message":<some bytes>
}

var t Tweet

#如何將對應的字段資料解組到 Tweet 結構中,該結構可以包含任何類型的字段,即切片/地圖/自訂類型/指標類型?我是否必須一一單獨映射每個字段的數據,或者還有什麼通用的方法嗎?

我嘗試編組整個資料並將其解組回結構類型,但似乎它在內部修改了實際資料並且不起作用。

bytes, err := json.Marshal(data)
var t Tweet
err = json.Unmarshal(bytes,&t)

解決方法

我認為您沒有提到您的錯誤,但以下內容對我有用。你可以這樣嘗試。

package main

import (
    "encoding/json"
    "fmt"
)

type Tweet struct {
    UserId  int    `json:"user_id"`
    Message string `json:"message"`
}

func main() {
    // Example data: map of field tags to JSON-encoded byte slices
    data := map[string]json.RawMessage{
        "user_id": []byte(`123`),             // Encoded as a JSON number
        "message": []byte(`"Hello, world!"`), // Encoded as a JSON string
    }

    // Convert map to JSON
    jsonData, err := json.Marshal(data)
    if err != nil {
        fmt.Println("Error marshalling map to JSON:", err)
        return
    }

    // Unmarshal JSON into Tweet struct
    var t Tweet
    if err := json.Unmarshal(jsonData, &t); err != nil {
        fmt.Println("Error unmarshalling JSON:", err)
        return
    }

    // Output the result
    fmt.Printf("Unmarshalled: %+v\n", t)

    // Marshal the Tweet struct back into JSON
    marshalledData, err := json.Marshal(t)
    if err != nil {
        fmt.Println("Error marshalling Tweet struct to JSON:", err)
        return
    }

    // Output the marshalled JSON
    fmt.Printf("Marshalled: %s\n", marshalledData)
}

以上是將部分資料位元組解組到自訂結構中的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除