在 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" =&gt; 'bar' .to_s 提供"\"foo\"=&gt;\"bar\""。 SampleWorker 是否在您的控制之下? 【参考方案1】:

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

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

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

【讨论】:

以上是关于在 Rails 中将 JSON 字符串转换为 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

在rails中将字符串转换为数组

在 Rails 中将文件大小字符串转换为等效千字节

如何在 Next JS 应用程序中将字符串转换为 HTML 元素?

js字符串如何转换成对象?

Rails:如何将对象数组的哈希转换为 json

js中将字符串转换成json的三种方式