我觉得这很奇怪,这很正常:
get '/initialize' do
# ok
json foo: 'bar'
end
但是这会导致错误:
get '/initialize' do
json { foo: 'bar' } # error!
end
语法错误,意外的':',预期为'}'(SyntaxError)
为什么?
如何编写类似以下代码:
get '/initialize' do
json {
item1: {
item2: {
item3: 'ok'
}
}
}
end
答案 0 :(得分:7)
因为后一种情况假设您正在使用块调用json
方法,而foo: 'bar'
是无效的语句。即
json { foo: 'bar' }
的解析方式(几乎)与
json do
foo: 'bar'
end
这是胡说八道。 (“几乎”是因为括号和do...end
的优先级略有不同;在这种情况下并不重要。)
前一种情况假设foo: 'bar'
是一个命名参数,并转换为Hash
。 json({ foo: 'bar' })
会明确表明您正在传递Hash
,而不是编写块。因此,以下是您尝试编写的正确语法:
get '/initialize' do
json({
item1: {
item2: {
item3: 'ok'
}
}
})
end
您也可以使用关键字方法(尽管我发现它的可读性较差):
get '/initialize' do
json item1: {
item2: {
item3: 'ok'
}
}
end
答案 1 :(得分:1)
它对我有用:
get '/songs' do
content_type :json
{ song: "Wake me Up" }.to_json
end