Json 用方括号格式化
Json Formatted with Square Brackets
我尝试渲染 json,其中根目录用方括号括起来。我要求的格式是:
[{"status":"Failure","message":"Invalid Credentials"}]
我的代码是:
render :json=> [{:status=>'Failure',:message=>'Invalid Credentials'}], :status=>422
我无法在响应中得到方括号。我目前的回复是:
{"status":"Failure","message":"Invalid Credentials"}
如何获取所需的格式?
您要做的是在 return 中命名您希望接收的整个对象。方括号表示一个数组,但是 JSON 总是 return 是一个 HASH(花括号)...诀窍是这个散列可能包含一个数组。所以代替:
render :json=> [{:status=>'Failure',:message=>'Invalid Credentials'}], :status=>422
这样做:
render :json=> { :my_array => [{:status=>'Failure',:message=>'Invalid Credentials'}], :status=>422 }
然后,获取 my_json[:my_array] 而不是获取 json 对象(我们将其称为 my_json]。这将 return 您描述的对象。
Rails json
渲染系统还有很多不足之处。这是一个解决方法:
render(
text: [ {:status=>'Failure',:message=>'Invalid Credentials'} ].to_json,
content_type: 'application/json',
status: 422
)
如果您愿意自己进行编码,则可以通过系统强制执行任何您想要的操作。 Rails 不会触及 text
渲染调用的内容,它只是忠实地发送。
值得注意的是,某些模块可以改变 render(json:...)
方法的行为,例如 jBuilder.
如果你经常这样做,你可能想在你的控制器中创建一个方法来正确封装它,比如:
def render_json(object, options = nil)
render({
text: object.to_json,
content_type: 'application.json'
}.merge(options || { }))
end
不得不这样做有点令人讨厌,但是 Rails 确实对您想如何编码 JSON 数据做出了过多的假设。
我尝试渲染 json,其中根目录用方括号括起来。我要求的格式是:
[{"status":"Failure","message":"Invalid Credentials"}]
我的代码是:
render :json=> [{:status=>'Failure',:message=>'Invalid Credentials'}], :status=>422
我无法在响应中得到方括号。我目前的回复是:
{"status":"Failure","message":"Invalid Credentials"}
如何获取所需的格式?
您要做的是在 return 中命名您希望接收的整个对象。方括号表示一个数组,但是 JSON 总是 return 是一个 HASH(花括号)...诀窍是这个散列可能包含一个数组。所以代替:
render :json=> [{:status=>'Failure',:message=>'Invalid Credentials'}], :status=>422
这样做:
render :json=> { :my_array => [{:status=>'Failure',:message=>'Invalid Credentials'}], :status=>422 }
然后,获取 my_json[:my_array] 而不是获取 json 对象(我们将其称为 my_json]。这将 return 您描述的对象。
Rails json
渲染系统还有很多不足之处。这是一个解决方法:
render(
text: [ {:status=>'Failure',:message=>'Invalid Credentials'} ].to_json,
content_type: 'application/json',
status: 422
)
如果您愿意自己进行编码,则可以通过系统强制执行任何您想要的操作。 Rails 不会触及 text
渲染调用的内容,它只是忠实地发送。
值得注意的是,某些模块可以改变 render(json:...)
方法的行为,例如 jBuilder.
如果你经常这样做,你可能想在你的控制器中创建一个方法来正确封装它,比如:
def render_json(object, options = nil)
render({
text: object.to_json,
content_type: 'application.json'
}.merge(options || { }))
end
不得不这样做有点令人讨厌,但是 Rails 确实对您想如何编码 JSON 数据做出了过多的假设。