Я отправляю объект JSON в ruby с помощью javascript. Но я не могу разобрать его там. Я пробовал следить за вещами, но не повезло. Кроме того, я сейчас искал, но я не мог найти ничего полезного.Ruby - разбор JSON по URL
Обратите внимание, что я очень новый рубин.
Мои испытания:
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
Я создаю JSON в JavaScript, как это:
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, а затем передал объект рубину. И затем я наконец смог напечатать объект в рубине. Он приведен ниже:
{"name": "METIN", "surname": "EMENULLAHI"}
Метод .class утверждает, что это массив. Но я не могу получить доступ к данным с классическими способами, например:
array['name']
ошибки является:
can't convert String into Integer
И когда я пытаюсь передать его JSON.parse
рубина, он дает мне следующую ошибку:
can't convert Array into String
Так что я использовал JSON.parse(conf_array.to_json)
, но опять же при доступе к данным он дает такую же ошибку, как массивы:
can't convert String into Integer
Что должно быть сделано сейчас?
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
«s конструктор перечисленных выше.
Update3:
Хорошо, теперь я получить хоть что-то из массива. Но когда я доступа к ключу, он отображает сам ключ:
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).
Вам нужно будет добавить образец 'JSON', который вы пытаетесь проанализировать. – fmendez
Ваши данные для сообщения выглядят подозрительными для меня - смесь параметров, закодированных в форме, и данных json. Когда вы выполняете '' conf = "+ json_of_form_vars', он попытается преобразовать этот объект javascript в строку, что, вероятно, даст что-то бесполезное, как [Object object]. Вам нужно использовать JSON.stringify, чтобы преобразовать его в json. –
@FrederickCheung, вы должны опубликовать это как ответ. Это то, что ОП делает неправильно. –