【发布时间】:2020-03-26 13:20:54
【问题描述】:
我想创建一个接收 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
错误信息是:
8 | keys = env.params.json["keys"].as(Array(String)) # <-- ERROR
^
Error: can't cast (Array(JSON::Any) | Bool | Float64 | Hash(String, JSON::Any) | Int64 | String | Nil) to Array(String)
如果我将代码更改为解析不是Array(String),而是解析String,则编译不会出现问题。为什么 .as 方法的类型是 Array(String) 而不是 String 会有所不同?
如何更改代码以解析字符串数组?
【问题讨论】:
标签: json crystal-lang type-systems kemal