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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With