json.RawMessage的元帅

前端之家收集整理的这篇文章主要介绍了json.RawMessage的元帅前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
请在这里找到代码 http://play.golang.org/p/zdQ14ItNBZ

我将JSON数据保留为RawMessage,但无法将其解码.我需要包含结构的Marshalled和Unmarshalled,但我希望仍能获得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
}

然后通过程序的其余部分传播该更改.什么……你究竟想做什么?

猜你在找的JavaScript相关文章