我使用Echo在Golang中構建了一個極簡主義服務器。從golang的回聲請求中提取JSON
在內部,Echo可以在內部bind an incoming JSON request payload to a struct並訪問有效負載。
但是我有一個方案,我知道傳入的JSON請求有效負載只有3個字段,並且綁定在這種情況下不起作用。
我該如何訪問我關心的3個領域?如果我在Echo中無法做到這一點,您能推薦一款適用於Echo上下文結構的JSON解碼器嗎?
謝謝!
我使用Echo在Golang中構建了一個極簡主義服務器。從golang的回聲請求中提取JSON
在內部,Echo可以在內部bind an incoming JSON request payload to a struct並訪問有效負載。
但是我有一個方案,我知道傳入的JSON請求有效負載只有3個字段,並且綁定在這種情況下不起作用。
我該如何訪問我關心的3個領域?如果我在Echo中無法做到這一點,您能推薦一款適用於Echo上下文結構的JSON解碼器嗎?
謝謝!
這是我做的:
json_map := make(map[string]interface{})
err := json.NewDecoder(c.Request().Body).Decode(&json_map)
if err != nil {
return err
} else {
//json_map has the JSON Payload decoded into a map
cb_type := json_map["type"]
challenge := json_map["challenge"]
我並不是Echo最有經驗的人,但就我所知,綁定在這種情況下不起作用。 @elithar提供什麼可能是一個很好的回答你的問題在另一個線程:
來源:Golang Json single value parsing
可以解碼成圖[字符串]接口{},然後通過按鍵得到的元素。
data := make(map[string]interface{})
err := json.Unmarshal(content, &data)
if err != nil {
return nil, err
}
price, ok := data["ask_price"].(string); !ok {
// ask_price is not a string
return nil, errors.New("wrong type")
}
// Use price as you wish
結構往往是首選,因爲它們更明確的類型。你只需要在你關心的JSON中聲明這些字段,並且你不需要像使用map(encoding/json隱式處理)那樣鍵入斷言值。
你應該能夠抓住你的上下文的數據並以這種方式提取你想要的字段。
我不知道回聲,但在有這樣的綁定大多數語言,如果你不知道整個對象,你不得不求助於解析JSON與一個較低級別的庫。 – nycynik
我這樣做沒有問題。介紹一些你的代碼? – noisypixy