我觉得这很奇怪,这很正常:
get '/initialize' do
# ok
json foo: 'bar'
end
Run Code Online (Sandbox Code Playgroud)
但这会导致错误:
get '/initialize' do
json { foo: 'bar' } # error!
end
Run Code Online (Sandbox Code Playgroud)
语法错误,意外的':',期望'}'(SyntaxError)
为什么?
我怎么写这样的代码:
get '/initialize' do
json {
item1: {
item2: {
item3: 'ok'
}
}
}
end
Run Code Online (Sandbox Code Playgroud)
因为后一种情况假设您正在json使用块调用方法,并且foo: 'bar'它是无效的语句。即
json { foo: 'bar' }
Run Code Online (Sandbox Code Playgroud)
(几乎)与
json do
foo: 'bar'
end
Run Code Online (Sandbox Code Playgroud)
废话 (“几乎”是因为括号的优先级和do...end稍有不同;在这种情况下并不重要。)
前一种情况假设foo: 'bar'是一个命名参数,并转换为Hash。json({ foo: 'bar' })会明确表明您正在传递Hash,而不是编写代码块。因此,以下是您尝试编写的正确语法:
get '/initialize' do
json({
item1: {
item2: {
item3: 'ok'
}
}
})
end
Run Code Online (Sandbox Code Playgroud)
您也可以使用关键字方法(尽管我发现它的可读性较差):
get '/initialize' do
json item1: {
item2: {
item3: 'ok'
}
}
end
Run Code Online (Sandbox Code Playgroud)
小智 6
这个对我有用:
get '/songs' do
content_type :json
{ song: "Wake me Up" }.to_json
end
Run Code Online (Sandbox Code Playgroud)