2016-12-31 2 views
1

私はEchoを使用してGolangのミニマリストサーバーを構築しています。golangのエコーリクエストからJSONを抽出します

では、内部で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のフィールドを宣言するだけで済み、マップの場合と同じように値をアサーションする必要はありません(暗黙的にエンコード/ jsonが処理します)。


コンテキストのデータを取得して、この方法で必要なフィールドを抽出できるはずです。

関連する問題