在Kemal中将JSON解析为数组(字符串)

在Kemal中将JSON解析为数组(字符串),json,crystal-lang,type-systems,kemal,Json,Crystal Lang,Type Systems,Kemal,我想创建一个接收JSON数据并将其解析为字符串数组的端点 POST / { "keys": ["foo", "bar"] } 我的打字系统出了问题。这是我尝试的(.as(Array(String))),但它没有编译: require "kemal" def print_keys(keys : Array(String)) puts "Got keys: #{keys}" end post "/" do |env| keys = env.params.json["keys"].a

我想创建一个接收JSON数据并将其解析为字符串数组的端点

POST /
{
  "keys": ["foo", "bar"]
}
我的打字系统出了问题。这是我尝试的(
.as(Array(String))
),但它没有编译:

require "kemal"

def print_keys(keys : Array(String))
  puts "Got keys: #{keys}"
end

post "/" do |env|
  keys = env.params.json["keys"].as(Array(String)) # <-- ERROR
  print_keys(keys)
end

Kemal.run
要求“凯末尔”
def打印_键(键:数组(字符串))
放置“已获取密钥:#{keys}”
结束
张贴“/”do | env|
keys=env.params.json[“keys”].as(数组(字符串))#我在文档中找到,它使用
json.mapping
。在我的具体例子中,可以这样写:

require "kemal"

def print_keys(keys : Array(String))
  puts "Got keys: #{keys}"
end

class KeyMappings
  JSON.mapping({
    keys: Array(String)
  })
end

post "/" do |env|
  json = KeyMappings.from_json env.request.body.not_nil!
  print_keys(json.keys)
end

Kemal.run
require "kemal"

def print_keys(keys : Array(String))
  puts "Got keys: #{keys}"
end

class KeyMappings
  JSON.mapping({
    keys: Array(String)
  })
end

post "/" do |env|
  json = KeyMappings.from_json env.request.body.not_nil!
  print_keys(json.keys)
end

Kemal.run