我有 Rails 应用程序需要从我无法控制的 SOAP 服务器检索数据。它检索附有统计信息的用户列表,并将数据作为 JSON 返回。
检索到该数据后,我需要将其与从我的 Rails 应用程序数据库中检索到的数据结合起来。
一旦我从 SOAP 服务器获得 JSON,我将它发送到 Rails 控制器,以便可以将新值添加到 JSON,然后发送回视图。
我的问题是一个非常简单的问题。一旦 JSON 在我的控制器中,我似乎无法读取和迭代它。
我认为stat_data 的 JS 是从 SOAP 服务接收到的 JSON
window.get_metrics = (stat_data) ->
update_loading_message 'Getting Metrics'
console.log stat_data
$.ajax '/tracking/get_metrics',
type: "POST"
data: client_data: stat_data
dataType: 'json'
success : (data) ->
console.log(data)
# populate_table(data)
控制器
@client_advisors = params[:client_data]
puts @client_advisors
# This is where I would do my other processing / model calls to get new data
render file: 'tracking/metrics_data.json.erb', content_type: 'application/json'
的输出puts @client_advisors
{
"0"=>
{
"personnel_id"=>"1495",
"personnel_name"=>"John Smith",
"statistic_x"=>"200"
},
"1"=>
{
"personnel_id"=>"5266",
"personnel_name"=>"John Candy",
"statistic_x"=>"300"
},
"2"=>{
... etc ...
}
}
跟踪/metrics_data.json.erb
[
<%= puts '~~~~~~~~~~~~ PROCESSING JSON' %>
<% @client_advisors.each do |advisor| %>
<%= puts 'advisor::' %>
<%= puts advisor %>
<%= puts 'advisor.inspect::' %>
<%= puts advisor.inspect %>
{
... This is where my re-generated JSON would go
}
<% end %>
]
可笑的是,我似乎无法在我的 metrics_data.json.erb 中定位personal_name 或personal_id。它在控制台中输出每个完整的顾问对象都很好......但我不确定我应该使用什么来定位对象的值。我试过advisor.personnel_name
(显然不会工作,因为对象被命名为“0、1、2等” )advisor['0']
,,,advisor[0]
。advisor[:0]
没有一个允许我更深入地检索personal_name。
非常感谢您的时间!
解决了!
感谢@willglynn
“jQuery - 有点令人惊讶 - 没有创建 JSON 的机制。它可以很好地解析,但你必须自己对其进行编码。你可以使用 JSON.stringify ,但是对于某些浏览器,你需要 JSON2.js” - @willglynn
更新了 JS
window.get_metrics = (stat_data) ->
update_loading_message 'Getting Metrics'
console.log stat_data
$.ajax '/tracking/get_metrics',
type: "POST"
data: client_data: JSON.stringify(stat_data)
dataType: 'json'
success : (data) ->
console.log(data)
# populate_table(data)
更新的控制器
@client_advisors = JSON.parse(params[:client_data])
更新了 tracking/metrics.erb.json
<% puts advisor %>
<% puts advisor['personnel_id'] %>