crystal-lang – 如何指定JSON解析的数据类型?

前端之家收集整理的这篇文章主要介绍了crystal-lang – 如何指定JSON解析的数据类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 JSON响应,它是一个哈希数组:
[{"project" => {"id" => 1,"name" => "Internal"},{"project" => {"id" => 2,"name" => "External"}}]

我的代码如下所示:

client = HTTP::Client.new(url,ssl: true)
response = client.get("/projects",ssl: true)
projects = JSON.parse(response.body) as Array

这给了我一个数组,但似乎我需要对元素进行类型转换以实际使用它们,否则我得到Nil的未定义方法'[]'(编译时类型是(Nil | String | Int64 | Float64 | Bool | Hash(String,JSON :: Type)| Array(JSON :: Type))).

我尝试使用Array(Hash),但这使得我不能使用Hash(K,V)作为泛型类型参数,使用更具体的类型.

如何指定类型?

解决方法@H_404_16@
您必须在访问元素时强制转换这些元素:
projects = JSON.parse(json).as(Array)
project = projects.first.as(Hash)["project"].as(Hash)
id = project["id"].as(Int64)

http://carc.in/#/r/f3f

但是对于像这样的结构良好的数据,你最好使用JSON.mapping:

class ProjectContainer
  JSON.mapping({
    project: Project
  })
end

class Project
  JSON.mapping({
    id: Int64,name: String
  })
end

projects = Array(ProjectContainer).from_json(json)
project = projects.first.project
pp id = project.id

http://carc.in/#/r/f3g

您可以在https://github.com/manastech/crystal/issues/982#issuecomment-121156428查看有关此问题的更详细说明

猜你在找的JavaScript相关文章