在凯末尔的 POST 中获取 JSON



我想要的是凯末尔中的 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,将其转换为字符串并返回 JSON?

更新:payload是一种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

相关内容

  • 没有找到相关文章

最新更新