将结构转换为[] json.RawMessage

时间:2019-06-03 21:19:52

标签: json go

尝试将结构转换为[] json.RawMessage。我的理解是json.Marshal()像[] json.RawMessage一样将其转换为byte []。但是,我似乎无法在两者之间转换。我的函数希望以[]json.RawMessage的形式接收输入。

尝试了几种不同的方法,包括myIn := json.RawMessage(&myJsonStruct{"string1", "string2"})myIn := (*json.RawMessage)(json.Marshal(&myJsonStruct{"string1", "string2"}))

type myJsonStruct struct {
    myString       string  `json:"myString"`
    mySecongString string  `json:"mySecondString"`
}

myIn := json.Marshal(&myJsonStruct{"string1", "string2"})

myFunction(myIn)

myFunction(receivedIn []json.RawMessage) {
    //do work
    return
}

1 个答案:

答案 0 :(得分:2)

这里有几件事:

  1. 您需要创建json.RawMessage的新切片,以将期望的类型作为参数传递给函数myFunction
  2. 将整理自定义结构myJsonStruct的结果存储在变量myIn(类型[]byte)中
  3. 创建一个新变量myInRaw(类型为json.RawMessage)并将其附加到先前创建的json.RawMessage切片中。

然后,上述步骤将使您可以将json.RawMessage的一部分传递给函数,以完成进一步的工作。

请参见下面的示例或playground中的工作示例:

package main

import (
    "encoding/json"
)

type myJsonStruct struct {
    myString       string `json:"myString"`
    mySecongString string `json:"mySecondString"`
}

func myFunction(receivedIn []json.RawMessage) {
    //do work
    return
}

func main() {

    var rawJSONSlice []json.RawMessage

    myIn, err := json.Marshal(
        &myJsonStruct{
            myString:       "string1",
            mySecongString: "string2",
        },
    )
    if err != nil {
        // catch err
    }

    myInRaw := json.RawMessage(myIn)

    rawJSONSlice = append(rawJSONSlice, myInRaw)

    myFunction(rawJSONSlice)
}