我正在使用 javascript 向 ruby 发送一个 JSON 对象。但我无法在那里解析它。我尝试了以下东西,但没有运气。我也一直在寻找一段时间,但我找不到任何有用的东西。
请注意,我是非常新的红宝石。
我的试验:
def initialize(game_conf_json)
parsed_conf = JSON.parse(conf_json)
@param1 = parsed_conf['name'][0]
@param2 = parsed_conf['surname'][0]
=begin
I also tried this:
@param1 = parsed_conf['name']
@param2 = parsed_conf['surname']
But no matter what other things I try, I'm getting the following error:
"21:in `[]': can't convert String into Integer (TypeError)"
OR
"can't convert Array into String (TypeError), "
=end
File.open("some_direc/conf.json", "w") do |f|
f.write(game_conf_json)
end
end
我像这样在javascript中创建json:
var json_of_form_vars = {};
json_of_form_vars.name = name_val;
json_of_form_vars.surname = surname_val;
并以这种方式发送:
$.ajax({
url: "../fundament/dispatch.rb/",
type: "post",
dataType: "json",
data: "conf="+json_of_form_vars,
.....
我怎么解决这个问题?是否有针对此问题的适当教程?
UPDATE1(根据建议): 我使用 JSON.stringify 然后将对象传递给 ruby。然后我终于可以用 ruby 打印对象了。它在下面列出:
{"name": "METIN", "surname": "EMENULLAHI"}
方法 .class 声称它是一个数组。但我无法使用经典方式访问数据,例如:
array['name']
错误是:
无法将字符串转换为整数
当我尝试将它传递给JSON.parse
in ruby 时,它给了我以下错误:
无法将数组转换为字符串
所以我使用JSON.parse(conf_array.to_json)
了,但是在访问数据时再次出现与数组相同的错误:
无法将字符串转换为整数
现在应该怎么办?
UPDATE2 这是我的 cgi 处理程序,它将 URL 参数传递到适当的位置:
cgi_req = CGI::new
puts cgi_req.header
params_from_request = cgi_req.params
logger.error "#{params_from_request}"
action_todo = params_from_request['action'][0].chomp
base = Base.new
if action_todo.eql?('create')
conf_json = params_from_request['conf']
# This line prints the json like this: {"name": "SOME_NAME", "surname": "SOME_SURNAME"}
logger.error "#{conf_json}"
base.create_ident(conf_json)
end
在基类中:
def create_ident(conf_json)
require 'src/IdentityCreation'
iden_create = IdentityCreation.new(conf_json)
end
IdentityCreation
的构造函数在上面列出。
更新3:
好的,我现在至少从数组中得到了一些东西。但是当我访问一个密钥时,它会显示密钥本身:
parsed_conf = JSON.parse(conf_json.to_json)
@param1 = parsed_conf[0]['name']
@param2 = parsed_conf[0]['surname']
# At this point when I print the @param1, it gives me "name"(the key), not "SOME_NAME"(the value).