从Go中的流打印/记录完整的非结构化json
我继承了其他人的API代码,因为我不熟悉它接收的请求,所以我尝试打印它们或记录它们,以便查看它们的结构。从我读到的关于Go的内容来看,JSON是用结构来解码的,但是因为我不知道如何接收请求,所以我无法编写结构 我在一个基本API上尝试了以下操作,但他们只是打印出一张空地图,或者什么都没有:从Go中的流打印/记录完整的非结构化json,json,go,Json,Go,我继承了其他人的API代码,因为我不熟悉它接收的请求,所以我尝试打印它们或记录它们,以便查看它们的结构。从我读到的关于Go的内容来看,JSON是用结构来解码的,但是因为我不知道如何接收请求,所以我无法编写结构 我在一个基本API上尝试了以下操作,但他们只是打印出一张空地图,或者什么都没有: func createBook(w http.ResponseWriter, r *http.Request) { var result map[string]interface{} _ =
func createBook(w http.ResponseWriter, r *http.Request) {
var result map[string]interface{}
_ = json.NewDecoder(r.Body).Decode(&result)
fmt.Println(result)
有没有其他方法可以在我事先不知道Struct的情况下打印收到的json?使用json.Unmarshal函数
import "bytes"
func createBook(w http.ResponseWriter, r *http.Request) {
var result map[string]interface{}
data :+ StreamToByte(r.Body)
err := json.Unmarshal(data, &result)
if err !=nil{
fmt.Println(err) //better to use log
}else
fmt.Println(result)
}
}
func StreamToByte(stream io.Reader) []byte {
buf := new(bytes.Buffer)
buf.ReadFrom(stream)
return buf.Bytes()
}
参考:
它可能正在打印一个空映射,因为您的JSON输入可能是一个空对象。或者它可能是一个简单的值,比如JSON数字或字符串,或者JSON数组,并且数组不能被解组到映射中。或者您的输入JSON可能无效。请不要忽略返回的错误。另外,如果您不知道输入是对象还是数组,请使用
interface{}
,并且encoding/json
包将选择适当的类型,在json对象的情况下,可以将其解组为–[]interface{}
。@icza我在第一个示例中使用了interface,但仍然返回了一个空映射,除非你是说别的。也没有返回错误,我知道json是有效的,因为代码能够很好地处理它。谢谢!StreamToByte
正是我能够使用unmarshal所需要的,但我不知道如何使用。
import "bytes"
func createBook(w http.ResponseWriter, r *http.Request) {
var result map[string]interface{}
data :+ StreamToByte(r.Body)
err := json.Unmarshal(data, &result)
if err !=nil{
fmt.Println(err) //better to use log
}else
fmt.Println(result)
}
}
func StreamToByte(stream io.Reader) []byte {
buf := new(bytes.Buffer)
buf.ReadFrom(stream)
return buf.Bytes()
}