将json.Unmarshal嵌套对象转换为字符串或[]字节

前端之家收集整理的这篇文章主要介绍了将json.Unmarshal嵌套对象转换为字符串或[]字节前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图解散一些json,以便一个嵌套的对象不被解析,只是被当作一个字符串或[]字节.

所以我想得到以下内容

{
    "id"  : 15,"foo" : { "foo": 123,"bar": "baz" }
}

解散:

type Bar struct {
    Id  int64  `json:"id"`
    Foo []byte `json:"foo"`
}

我收到以下错误

json: cannot unmarshal object into Go value of type []uint8

playground demo

解决方法

我想你正在寻找的是编码/ json包中的 RawMessage类型.

文件规定:

@H_403_22@

type RawMessage []byte

RawMessage is a raw encoded JSON object. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding.

以下是使用RawMessage的一个工作示例:

package main

import (
    "encoding/json"
    "fmt"
)

var jsonStr = []byte(`{
    "id"  : 15,"bar": "baz" }
}`)

type Bar struct {
    Id  int64           `json:"id"`
    Foo json.RawMessage `json:"foo"`
}

func main() {
    var bar Bar

    err := json.Unmarshal(jsonStr,&bar)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n",bar)
}

输出

@H_403_22@

{Id:15 Foo:[123 32 34 102 111 111 34 58 32 49 50 51 44 32 34 98 97 114 34 58 32 34 98 97 122 34 32 125]}

Playground

猜你在找的JavaScript相关文章