2017-06-17 6 views
0

私が必要とするのは、本体にアクセスするキー/値の特定の数があるケメールのPOSTリクエストと、次にストリング化して渡すだけの任意のJSONオブジェクトです後でJSONに解析します。kemalのPOSTでJSONを取得

私の問題は、明らかにタイプを正しく取得できないことです。このような潜在的なJSON本体の 思う:

{ 
    "endpoint": "http://example.com", 
    "interval": 500, 
    "payload": { 
     "something": "else", 
     "more": { 
      "embedded": 1 
     } 
    } 
} 

は今、私がやろうとしていたもの以下である:

require "kemal" 

post "/schedule" do |env| 
    endpoint = env.params.json["endpoint"].as(String) 
    interval = env.params.json["interval"].as(Int64) 
    payload = String.from_json(env.params.json["payload"].as(JSON::Any)) 

    # ... move things along 

    env.response.content_type = "application/json" 
    { id: id }.to_json 
end 

Kemal.run 

今、私は「ペイロード」をアクセスするときになっているようだどうやら何タイプHash(String, JSON::Type)なので、少し混乱します。

どのように私はちょうど要求の本文からサブJSONを得ることができるだろう任意のアイデアは、文字列に戻ってJSONに変換?

答えて

1

更新日:​​は、JSON::Typeのタイプです。キャストして.to_jsonに電話すると、このトリックが実行されます。 "{\" 何かの\」=> \ "他\"、\ "より\":

require "kemal" 

post "/schedule" do |env| 
    endpoint = env.params.json["endpoint"].as(String) 
    interval = env.params.json["interval"].as(Int64) 
    payload = env.params.json["payload"].as(JSON::Type) 
    env.response.content_type = "application/json" 
    payload.to_json 
end 

Kemal.run 
+0

うーんは、今 'payload_as_string.to_json'は、このような文字列ではなく、有効なJSON文書を...返します=> {\ "埋め込み\" => 1}} " – tpei

+0

答えを更新しました –

関連する問題