我继承了API的其他人的代码,并且由于我不熟悉该API收到的请求,因此我尝试打印它们或记录它们,以便我可以看到它们的结构。根据我对Go的了解,JSON是使用Structs解码的,但是由于我不知道如何接收请求,因此无法编写结构。
我已经在基本的API上尝试了以下操作,但它们只是将我打印出空白地图或什么都不打印:
func createBook(w http.ResponseWriter, r *http.Request) {
var result map[string]interface{}
_ = json.NewDecoder(r.Body).Decode(&result)
fmt.Println(result)
func createBook(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
var book Book
_ = json.NewDecoder(r.Body).Decode(&book)
buf := new(bytes.Buffer)
buf.ReadFrom(r.Body)
newStr := buf.String()
reader := strings.NewReader(newStr)
writter := os.Stdout
dec := json.NewDecoder(reader)
enc := json.NewEncoder(writter)
for {
var m map[string]interface{}
if err := dec.Decode(&m); err == io.EOF {
break
} else if err != nil {
log.Fatal(err)
}
if err := enc.Encode(&m); err != nil {
log.Println(err)
}
fmt.Println(m)
}
book.ID = strconv.Itoa(rand.Intn(100000000)) // Mock ID - not safe
books = append(books, book)
json.NewEncoder(w).Encode(book)
}
还有其他方法可以在不事先知道strut的情况下打印接收到的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()
}
请参阅:https : //appdividend.com/2020/02/28/golang-how-to-convert-json-to-map-in-go/ https://gist.github.com/dixudx/3989284b142414e10352fde9def5c771
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句