在凯末尔 POST 获得 JSON
Get JSON in POST in kemal
我想要的是 kemal 中的 POST 请求,其中 body 有一定数量的 keys/values 我想访问,然后是任意 JSON Object 我只想将其字符串化并传递然后解析回 JSON.
我的问题是我显然无法获得正确的类型。
想想这样一个潜在的 JSON body:
{
"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
现在显然我在访问 "payload" 时得到的是 Hash(String, JSON::Type)
类型的东西,这让我有点困惑。
关于如何从请求 body 中获取 sub-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
我想要的是 kemal 中的 POST 请求,其中 body 有一定数量的 keys/values 我想访问,然后是任意 JSON Object 我只想将其字符串化并传递然后解析回 JSON.
我的问题是我显然无法获得正确的类型。 想想这样一个潜在的 JSON body:
{
"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
现在显然我在访问 "payload" 时得到的是 Hash(String, JSON::Type)
类型的东西,这让我有点困惑。
关于如何从请求 body 中获取 sub-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