首页 > 后端开发 > 戈兰 > 正文

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

王林
发布: 2024-02-12 18:20:06
转载
370 人浏览过

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

问题内容

我有 map[string][]byte 形式的数据,其中 key 是该结构体的 json 字段标记,value 是字节切片。

考虑这个例子:

type Tweet struct {
    UserId int `json:"user_id"`
    Message string `json:"message"`
}
登录后复制
data = {
"user_id":,
"message":
}
登录后复制

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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!