Crystal中的JSON :: Any和JSON :: Type有什么区别?

问题描述 投票:3回答:2

在Crystal语言中,JSON::AnyJSON::Type有什么区别?这种类型的用例有哪些?

crystal-lang
2个回答
4
投票

JSON ::任何is a struct,由于解析而返回。它有方便的方法来访问基础数据as_sas_boolas_f等:

obj = JSON.parse %({"access": true})
p obj.class           # => JSON::Any
p obj["access"]       # => true
p obj["access"].class # => JSON::Any

JSON::Type是所有可能的json类型的联合类型。它由JSON::Any结构内部用于represent the data

p obj.raw             # => {"access" => true}
p obj.raw.class       # => Hash(String, JSON::Type)

2
投票

JSON :: Type是递归定义的“别名”:

alias Type = Nil | Bool | Int64 | Float64 | String | Array(Type) | Hash(String, Type)

别名是Crystal的类型语法的一部分。有关详细信息,请参阅https://crystal-lang.org/docs/syntax_and_semantics/alias.html

JSON :: Any是一个Struct(Struct <Value <Object); JSON :: Any的实例保存任何JSON类型的“原始”值:

cr(0.24.1) > x=JSON::Any.new("hi")
 => "hi"
icr(0.24.1) > x
 => "hi"
icr(0.24.1) > x.raw
 => "hi"
© www.soinside.com 2019 - 2024. All rights reserved.