我將資料發送到 API,如下所示:
{"after": {"amount": 811,"id":123,"status":"Hi"}, "key": [70]}
我在列印時收到以下訊息:
map[after:map[amount:811 id:123 status:Hi ] key:[70]]
有沒有辦法像這樣列印單個欄位? 數量::800 id:123 狀態:嗨
編碼:
package main
import (
"encoding/json"
"fmt"
"io"
"io/ioutil"
"log"
"net/http"
"strings"
)
var (
PORT = ":8080"
)
func main() {
fmt.Println("In Main")
http.HandleFunc("/", changedData)
http.ListenAndServe(PORT, nil)
}
type Data struct {
Id int64 `json:"id"`
Amount float64 `json:"amount"`
Status string `json:"status"`
}
type mark map[string]interface{}
func changedData(w http.ResponseWriter, r *http.Request) {
fmt.Println("Coming From API")
reqBody, _ := ioutil.ReadAll(r.Body)
fmt.Println("Data coming from API ", string(reqBody))
digit := json.NewDecoder(strings.NewReader(string(reqBody)))
for digit.More() {
var result mark
err := digit.Decode(&result)
if err != nil {
if err != io.EOF {
log.Fatal(err)
}
break
}
fmt.Println("final_data ", result)
}
}
uj5u.com熱心網友回復:
解碼為與 JSON 檔案結構匹配的 Go 型別。您為“after”欄位宣告了一個型別。用結構包裝該型別以匹配檔案。
func changedData(w http.ResponseWriter, r *http.Request) {
var v struct{ After Data }
err := json.NewDecoder(r.Body).Decode(&v)
if err != nil {
http.Error(w, "bad request", 400)
return
}
fmt.Printf("final_data: %#v", v.After)
}
操場示例。
uj5u.com熱心網友回復:
struct type如果您知道 JSON 檔案格式或者 JSON 格式是預定義的,我認為您可以定義一個。據我所知,interface{}當您不知道 JSON 格式或沒有 JSON 的預定義格式時,主要使用一種方法。如果定義 astruct type 并在將 JSON 解組為結構體時使用它,則可以通過鍵入 likedata.Id或來訪問變數data.Status。
這是一個示例代碼:
package main
import (
"encoding/json"
"fmt"
)
type Data struct {
AfterData After `json:"after"`
Key []int `json:"key"`
}
type After struct {
Id int64 `json:"id"`
Amount float64 `json:"amount"`
Status string `json:"status"`
}
func main() {
j := []byte(`{"after": {"amount": 811,"id":123,"status":"Hi"}, "key": [70]}`)
var data *Data
err := json.Unmarshal(j, &data)
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println(data.AfterData)
fmt.Println(data.AfterData.Id)
fmt.Println(data.AfterData.Amount)
fmt.Println(data.AfterData.Status)
}
輸出將是
{123 811 Hi}
123
811
Hi
去游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358298.html
標籤:走
上一篇:忽略的YAML標簽
