在 Rails 中将 JSON 字符串转换为 JSON 对象
Posted
技术标签:
【中文标题】在 Rails 中将 JSON 字符串转换为 JSON 对象【英文标题】:Converting a JSON string into JSON object in Rails 【发布时间】:2021-10-31 22:07:10 【问题描述】:我从 Rails 控制器接收 JSON 字符串并将其传递给工作人员;但是,当它到达工作人员时,它被转换为字符串,然后我试图将其转换回 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>)>
【问题讨论】:
您没有从 SampleWorker 获取 JSON。您将获得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
【讨论】:
以上是关于在 Rails 中将 JSON 字符串转换为 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章