从Go中的流打印/记录完整的非结构化json

从Go中的流打印/记录完整的非结构化json,json,go,Json,Go,我继承了其他人的API代码,因为我不熟悉它接收的请求,所以我尝试打印它们或记录它们,以便查看它们的结构。从我读到的关于Go的内容来看,JSON是用结构来解码的,但是因为我不知道如何接收请求,所以我无法编写结构 我在一个基本API上尝试了以下操作,但他们只是打印出一张空地图,或者什么都没有: func createBook(w http.ResponseWriter, r *http.Request) { var result map[string]interface{} _ =

我继承了其他人的API代码,因为我不熟悉它接收的请求,所以我尝试打印它们或记录它们,以便查看它们的结构。从我读到的关于Go的内容来看,JSON是用结构来解码的,但是因为我不知道如何接收请求,所以我无法编写结构

我在一个基本API上尝试了以下操作,但他们只是打印出一张空地图,或者什么都没有:

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()
}