从golang的echo请求中提取JSON

I'm using Echo to build a minimalist server in Golang.

In, Echo one can bind an incoming JSON request payload to a struct internally and access the payload.

However I have a scenario wherein I know only 3 fields of the incoming JSON request payload, and the bind doesn't work in this case.

How do I still access the 3 fields that I care about ? If I cannot do this in Echo, can you recommend me a JSON decoder that works with Echo's context structure?

This is how I did it:

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

I'm not the most experienced with Echo, but to my knowledge the bind won't work in this case. @elithar provided what may be a good answer to your question in another thread:


From: Golang Json single value parsing

You can decode into a map[string]interface{} and then get the element by key.

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

Structs are often preferred as they are more explicit about the type. You only have to declare the fields in the JSON you care about, and you don't need to type assert the values as you would with a map (encoding/json handles that implicitly).


You should be able to grab your context's data and extract the fields you want in this manner.