gpt4 book ai didi

json - json.RawMessage 编码(marshal)

转载 作者:IT王子 更新时间:2023-10-29 01:10:27 28 4
gpt4 key购买 nike

请在此处找到代码 http://play.golang.org/p/zdQ14ItNBZ

我将 JSON 数据保存为 RawMessage,但无法将其解码。我需要对包含结构进行编码和解码,但我希望仍然能够获取 JSON 字段。

代码:

package main

import (
"encoding/json"
"fmt"
)

type Data struct {
Name string
Id int
Json json.RawMessage
}
type Data2 struct {
Name string
Id int
}


func main() {

tmp := Data2{"World", 2}

b, err := json.Marshal(tmp)
if err != nil {
fmt.Println("Error %s", err.Error())
}
fmt.Println("b %s", string(b))

test := Data{"Hello", 1, b}
b2, err := json.Marshal(test)
if err != nil {
fmt.Println("Error %s", err.Error())
}

fmt.Println("b2 %s", string(b2))

var d Data
err = json.Unmarshal(b2, &d)
if err != nil {
fmt.Println("Error %s", err.Error())
}
fmt.Println("d.Json %s", string(d.Json))

var tmp2 Data2
err = json.Unmarshal(d.Json, &tmp2)
if err != nil {
fmt.Println("Error %s", err.Error())
}
fmt.Println("Data2 %+v", tmp2)

}

输出:

b %s {"Name":"World","Id":2}
b2 %s {"Name":"Hello","Id":1,"Json":"eyJOYW1lIjoiV29ybGQiLCJJZCI6Mn0="}
d.Json %s "eyJOYW1lIjoiV29ybGQiLCJJZCI6Mn0="
Error %s json: cannot unmarshal string into Go value of type main.Data2
Data2 %+v { 0}

最佳答案

json.RawMessage 上的方法都采用指针接收器,这就是您无法使用其中任何一个的原因;你没有指针。

从执行的意义上说,这“有效”,但这可能不是您想要的策略:http://play.golang.org/p/jYvh8nHata

基本上你需要这个:

type Data struct {
Name string
Id int
Json *json.RawMessage
}

然后将更改传播到程序的其余部分。什么……你到底想做什么?

关于json - json.RawMessage 编码(marshal),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19145202/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com