如何使用Ruby on Rails转换字符串`to_json`和`to_xml`?

时间:2011-02-22 06:28:42

标签: ruby-on-rails ruby xml json ruby-on-rails-3

我正在使用Ruby on Rails 3,我想以某种方式转换字符串to_jsonto_xml

要知道,我需要以这种方式在Rack方法中返回该字符串:

[404, {"Content-type" => "application/json"}, ["Bad request"]]
# or
[404, {"Content-type" => "application/xml"}, ["Bad request"]]

但我需要的只是转换字符串to_jsonto_xml怎么可能呢?

3 个答案:

答案 0 :(得分:5)

有时您必须在文件中添加require 'json'(安装宝石后JSON implementation for Ruby)并执行以下操作:

JSON.parse("Bad request").to_json   

或者您可以尝试:

ActiveSupport::JSON.encode("Bad request").to_json

但在您的情况下,最好的方法可能是正确回应:

respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @somearray }
  format.json  { render :json => @somearray }
end

或者你可以这样做:

  mystring_json = '{"bar":"foo"}'
  [404, {'Content-Type' => 'application/json'}, [mysrting_json]] #json stuff
  mystring_xml = '<?xml><bar>foo</bar>'
  [404, {'Content-Type' => 'application/xml'}, [mysrting_xml]]  #xml stuff

答案 1 :(得分:2)

在你的控制器中,只需传入XML字符串:

render xml: "<myxml><cool>fff</cool></myxml>"

答案 2 :(得分:1)

JSON遵循JavaScript语法,因此JSON中的字符串很简单:

[404, {"Content-type" => "application/json"}, ["'Bad request'"]]

至于XML,答案并非如此简单。您必须决定要使用哪种标记结构并从那里开始。请记住,XML文档至少具有根标记。因此,您可以返回这样的XML文档:

<?xml version="1.0" encoding="utf-8"?>
<response>Bad request</response>

这样做的一种方法是使用Builder gem:

http://builder.rubyforge.org/

但是,我不完全确定为什么你需要将一个字符串本身作为JSON或XML返回。 JSON和XML通常用于传输结构化数据,例如,数组,嵌套数据,键值对等。无论你的客户端是什么,它可能只是按原样解释字符串,没有任何JSON或XML ecoding,不是吗?