【问题标题】:Converting a JSON string into JSON object in Rails在 Rails 中将 JSON 字符串转换为 JSON 对象
【发布时间】: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" =&gt; 'bar' }.to_s 提供"{\"foo\"=&gt;\"bar\"}"。 SampleWorker 是否在您的控制之下?

标签: ruby-on-rails json


【解决方案1】:

您需要将=&gt; 替换为:

str = str.gsub("=>", ":")
# => "{\"id\":\"F02DD5GH77X\", \"created\":1630584313, \"timestamp\":1630584313}"

JSON.parse(str)
# => {"id"=>"F02DD5GH77X", "created"=>1630584313, "timestamp"=>1630584313}

【讨论】:

    猜你喜欢
    • 2019-08-27
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多