2016-12-31 137 views
1

我使用Echo在Golang中構建了一個極簡主義服務器。從golang的回聲請求中提取JSON

在內部,Echo可以在內部bind an incoming JSON request payload to a struct並訪問有效負載。

但是我有一個方案,我知道傳入的JSON請求有效負載只有3個字段,並且綁定在這種情況下不起作用。

我該如何訪問我關心的3個領域?如果我在Echo中無法做到這一點,您能推薦一款適用於Echo上下文結構的JSON解碼器嗎?

謝謝!

+0

我不知道回聲,但在有這樣的綁定大多數語言,如果你不知道整個對象,你不得不求助於解析JSON與一個較低級別的庫。 – nycynik

+0

我這樣做沒有問題。介紹一些你的代碼? – noisypixy

回答

3

這是我做的:

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"] 
1

我並不是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隱式處理)那樣鍵入斷言值。


你應該能夠抓住你的上下文的數據並以這種方式提取你想要的字段。