下面是JSON字符串示例
json = "{:status=>\"ok\", :hitcount=>\"1\", :request_date=>Wed, 10 Oct 2019 00:00:00 +0000}"
字符串我已经尝试了下面提到的片段,但这没有工作,并给出错误JSON::ParserError (765: unexpected token at
JSON::ParserError (765: unexpected token at
require 'json' JSON.parse(json)
型
vmdwslir1#
不幸的是,JSON不能表示Ruby符号。JSON还要求键和值都要加引号,所以你提供的不是有效的JSON,会破坏JSON解析器。你只需要:
json = "{\"status\": \"ok\", \"hitcount\": \"1\", \"request_date\": \"Wed, 10 Oct 2019 00:00:00 +0000\"}"
字符串然后是Ruby JSON parser(感谢@engineersmnky!)有一个漂亮的功能:
JSON.parse(json, symbolize_name: true)
carvr3hs2#
它看起来像一个格式问题。例如,如果你有一个普通的散列与相同的数据,并将其转换为JSON,它会看起来有点不同:
require 'json' # Original value in post # json = "{:status=>\"ok\", :hitcount=>\"1\", :request_date=>Wed, 10 Oct 2019 00:00:00 +0000}" hash = {:status=>"ok", :hitcount=>"1", :request_date=>"Wed, 10 Oct 2019 00:00:00 +0000"} json = hash.to_json puts json # {"status":"ok","hitcount":"1","request_date":"Wed, 10 Oct 2019 00:00:00 +0000"} parsed = JSON.parse(json) puts parsed # {"status"=>"ok", "hitcount"=>"1", "request_date"=>"Wed, 10 Oct 2019 00:00:00 +0000"}
字符串你可以在这里看到我的意思:https://onlinegdb.com/tr6JVAV6y所以我猜你需要看看JSON是从哪里来的,并以适当的格式发送。
gfttwv5a3#
您可以使用eval()将此字符串转换为ruby代码(哈希)。你会得到一些问题,因为日期没有引用。(我只是让ChatGPT为它编写Regex)。这将把你的字符串转换成一个正确的ruby哈希:
eval()
json = "{:status=>\"ok\", :hitcount=>\"1\", :request_date=>Wed, 10 Oct 2019 00:00:00 +0000}" fixed_string = json.gsub(/:request_date=>(\w+,\s\d+\s\w+\s\d+\s\d+:\d+:\d+\s\+\d+)/, ':request_date=>"\1"') hash = eval(fixed_string)
字符串输出量:
{:status=>"ok", :hitcount=>"1", :request_date=>"Wed, 10 Oct 2019 00:00:00 +0000"}
型请注意,如果您无法控制输入,那么使用eval会带来安全风险,问题似乎是如何生成输出。
3条答案
按热度按时间vmdwslir1#
不幸的是,JSON不能表示Ruby符号。JSON还要求键和值都要加引号,所以你提供的不是有效的JSON,会破坏JSON解析器。你只需要:
字符串
然后是Ruby JSON parser(感谢@engineersmnky!)有一个漂亮的功能:
型
carvr3hs2#
它看起来像一个格式问题。例如,如果你有一个普通的散列与相同的数据,并将其转换为JSON,它会看起来有点不同:
字符串
你可以在这里看到我的意思:https://onlinegdb.com/tr6JVAV6y
所以我猜你需要看看JSON是从哪里来的,并以适当的格式发送。
gfttwv5a3#
您可以使用
eval()
将此字符串转换为ruby代码(哈希)。你会得到一些问题,因为日期没有引用。(我只是让ChatGPT为它编写Regex)。这将把你的字符串转换成一个正确的ruby哈希:字符串
输出量:
型
请注意,如果您无法控制输入,那么使用eval会带来安全风险,问题似乎是如何生成输出。