2017-09-15 31 views
3

假设我在水晶郎有一个简单的JSON对象映射,如:解析阵列中的水晶郎对象

class Item 
    JSON.mapping(
    id: UInt32, 
    name: String, 
) 
end 

我可以分析从JSON字符串的各个对象很容易,像这样:

foo = Item.from_json(%({"id":1,"name":"Foo"})) 
puts "OK: foo=#{foo}" 
# => OK: foo=Item(@id=1, @name="Foo") 

但是,我将如何解析一个数组来自JSON字符串的项目?我已经尝试了几种方法,但我不知道如何着手,例如:

items_str = %([{"id":1,"name":"Foo"},{"id":2,"name":"Bar"}]) 
items : Array(Item) = JSON.parse(items_str) 
# => Error in foo.cr:15: type must be Array(Item), not JSON::Any 

当然,我也希望能够有一个JSON解析器拉要做到这一点,那么想必有一些映射技巧或输入提示我错过了。想法?

回答

5

在此发现它spec。所以,你可以使用Array(Item).from_json

items = Array(Item).from_json %([{"id":1,"name":"Foo"},{"id":2,"name":"Bar"}]) 

items.first.id #=> 1 
items.first.name #=> "Foo" 
items.last.id #=> 2 
items.last.name #=> "Bar" 
+0

太棒了 - 谢谢! – maerics