繁体   English   中英

如何在Rhodes中将字符串(红宝石哈希)解析为JSON或Array?

[英]How can I parse string(ruby hash) to JSON or Array in Rhodes?

我有一个向我的Rails后端发出请求的移动应用程序。

后端JSON以以下方式返回信息:

def get_data
    respond_to do |format|
      format.json{
        data = Form.select('column1, column2').where(field:'Rhodes')
        render :json => data
      }
    end
end

在我的应用程序(Rhodes)中,我正在使用Rho::AsyncHttp.post并将数据发送到我的webview索引:

response = Rho::AsyncHttp.post(
        :url => 'http://xyx.xyx.x.yx:3000/data/get_data.json',
        :headers => {"Content-Type" => "application/json; charset=utf-8", "Accept" => "application/json"}
      )


WebView.navigate( url_for :action => :index , :query => { :form => response['body'] })

现在,当我检查Web视图中的变量form ,将获得以下结构的数据:

<%= @form.inspect %>

"[{\"campo\"=>\"nombre\",\"tipo\"=>\"textfield\"},{\"campo\"=>\"nombre\",\"tipo\"=>\"textfield\"},{\"campo\"=>\"nombre\",\"tipo\"=>\"textfield\"}]"

因此,我需要在表中显示此数据,并希望对其进行循环。 我尝试了each

<h2>Data</h2>
<% @form.each do |x| %>
<div><%= x.tipo %></div>
<% end %>

但是我得到了错误: undefined method each for #.

因此,我尝试将其转换为JSON对象:

data = Rho::JSON.parse(@form)

但是,出现以下错误:

JSON error code: 10; Ofset: 9
Trace:
(eval):36:in ´parse´
(eval):36:in '´
lib/rho/render.rb:175:in ´eval_compiled_file´
lib/rho/render.rb:175:in ´render´ [...]

我在Ruby 1.9.3和Rhodes 3.5.1.12中使用

更新

我用eval解决了这个问题。 现在,我可以循环字符串了。 但是当我尝试打印变量时。 这些不显示。

<% data = eval(@form) %>
<% data.each do |hash| %>
 <ul>
   <li><%= puts hash['campo'] %></li> #only display the bullets but no the data
   <li><%= puts hash['tipo'] %></li> #only display the bullets but no the data
 </ul>
 <br />
<% end %>

我不使用罗德岛,但是...

您不能在此字符串上使用JSON:

"[{\"campo\"=>\"nombre\",\"tipo\"=>\"textfield\"},{\"campo\"=>\"nombre\",\"tipo\"=>\"textfield\"},{\"campo\"=>\"nombre\",\"tipo\"=>\"textfield\"}]"

因为它不是JSON序列化的对象。 =>是赠品。 JSON使用:序列化哈希值,以分隔键/值对。

使用inspect可能会使您感到困惑,因为它将把看起来像哈希数组的东西变成伪字符串。 我怀疑是这样的:

ary = [{"campo"=>"nombre","tipo"=>"textfield"},{"campo"=>"nombre","tipo"=>"textfield"},{"campo"=>"nombre","tipo"=>"textfield"}]

因为如果我inspect ary我会得到:

# => "[{\"campo\"=>\"nombre\", \"tipo\"=>\"textfield\"}, {\"campo\"=>\"nombre\", \"tipo\"=>\"textfield\"}, {\"campo\"=>\"nombre\", \"tipo\"=>\"textfield\"}]"

这是遍历哈希数组的方法:

ary.each do |hash|
  puts hash['tipo']
end
# >> textfield
# >> textfield
# >> textfield

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM