尝试将结构转换为[] 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
}
答案 0 :(得分:2)
这里有几件事:
json.RawMessage
的新切片,以将期望的类型作为参数传递给函数myFunction
myJsonStruct
的结果存储在变量myIn
(类型[]byte
)中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)
}