首页 >后端开发 >Golang >将部分数据字节解组到自定义结构中

将部分数据字节解组到自定义结构中

王林
王林转载
2024-02-12 18:20:06533浏览

将部分数据字节解组到自定义结构中

问题内容

我有 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删除