#ruby-on-rails #json
Вопрос:
Я получаю строку JSON от контроллера Rails и передаю ее работнику; однако, когда она попадает к работнику, она преобразуется в строку, которую я затем пытаюсь преобразовать обратно в JSON. Когда я это делаю, я получаю ошибки.
Ниже приведен пример того, что я пытаюсь сделать, а также ошибка, полученная при попытке сделать это:
[18] pry(#<SampleWorker>)> str = '{"id"=>"F02DD5GH77X", "created"=>1630584313, "timestamp"=>1630584313}'
=> "{"id"=>"F02DD5GH77X", "created"=>1630584313, "timestamp"=>1630584313}"
[19] pry(#<SampleWorker>)> JSON.parse(str)
JSON::ParserError: 809: unexpected token at '{"id"=>"F02DD5GH77X", "created"=>1630584313, "timestamp"=>1630584313}'
from /usr/local/lib/ruby/3.0.0/json/common.rb:216:in `parse'
[20] pry(#<SampleWorker>)> JSON(str)
JSON::ParserError: 809: unexpected token at '{"id"=>"F02DD5GH77X", "created"=>1630584313, "timestamp"=>1630584313}'
from /usr/local/lib/ruby/3.0.0/json/common.rb:216:in `parse'
[21] pry(#<SampleWorker>)>
Я даже пытался заменить "
его, и это, похоже, не помогает:
[26] pry(#<SampleWorker>)> str.gsub(""", "'")
=> "{'id'=>'F02DD5GH77X', 'created'=>1630584313, 'timestamp'=>1630584313}"
[27] pry(#<SampleWorker>)> JSON.parse(str.gsub(""", "'"))
JSON::ParserError: 809: unexpected token at '{'id'=>'F02DD5GH77X', 'created'=>1630584313, 'timestamp'=>1630584313}'
from /usr/local/lib/ruby/3.0.0/json/common.rb:216:in `parse'
[28] pry(#<SampleWorker>)>
Комментарии:
1. Вы не получите JSON обратно от SampleWorker. Вы получаете результат
Hash#to_s
.{ "foo" => 'bar' }.to_s
дает"{"foo"=>"bar"}"
. Находится ли SampleWorker под вашим контролем?
Ответ №1:
Вам нужно заменить =>
на :
str = str.gsub("=>", ":")
# => "{"id":"F02DD5GH77X", "created":1630584313, "timestamp":1630584313}"
JSON.parse(str)
# => {"id"=>"F02DD5GH77X", "created"=>1630584313, "timestamp"=>1630584313}