一尘不染

json.Unmarshal将嵌套的对象编入字符串或[] byte

go

我正在尝试解组一些json,以便嵌套的对象不会被解析,而只是被视为a string[]byte

所以我想得到以下内容:

{
    "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

游乐场演示


阅读 148

收藏
2020-07-02

共1个答案

一尘不染

我认为您正在寻找的是包中的RawMessage类型encoding/json

该文档指出:

输入RawMessage [] byte

RawMessage是原始编码的JSON对象。它实现了Marshaler和Unmarshaler,可用于延迟JSON解码或预计算JSON编码。

这是使用RawMessage的工作示例:

package main

import (
    "encoding/json"
    "fmt"
)

var jsonStr = []byte(`{
    "id"  : 15,
    "foo" : { "foo": 123, "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)
}

输出:

{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]}

操场

2020-07-02