在kemal中获取POST中的JSON

时间:2017-06-17 10:44:31

标签: json crystal-lang kemal

我想要的是在kemal中的POST请求,其中正文具有我想要访问的一定数量的键/值,然后是我想要字符串化并传递并随后解析回JSON的任意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,将其转换为String并返回JSON?

1 个答案:

答案 0 :(得分:1)

已更新:SELECT games.date, games.time, t.team_name as home_team, t1.team_name as away_team FROM games g LEFT JOIN teams t ON g.home_team=t.id LEFT JOIN teams t1 on g.away_team=t1.team 是一种payload。转换然后调用JSON::Type可以解决问题。

.to_json