JSON :: ParserError:757:'{的意外令牌

raj*_*eev 8 ruby json ruby-on-rails

当前的哈希是

{\"report_name\"=>\"Study/Control: ABIRATERONE ACETATE - 20151413355\", \"left_mue_start_date\"=>\"02-26-2015\", \"left_mue_end_date\"=>\"03-19-2015\", \"right_mue_start_date\"=>\"02-26-2015\", \"right_mue_end_date\"=>\"03-19-2015\", \"report_formulary_id\"=>\",7581\", \"mue\"=>\"true\", \"mue_type\"=>\"study/control\", \"chain_id\"=>\"1\", \"left_mue_formulary_ids\"=>[\"7581\"], \"action\"=>\"create_report\", \"controller\"=>\"informatics\", \"user_id\"=>339}
Run Code Online (Sandbox Code Playgroud)

现在我需要将其转换为适当的哈希值

{"report_name" => "Study/Control: ABIRATERONE ACETATE - 20151413355"}
Run Code Online (Sandbox Code Playgroud)

所以我试图用JSON.parse得到它,但我得到的错误如下:

JSON::ParserError: 757: unexpected token at '{
Run Code Online (Sandbox Code Playgroud)

所以,如果有人知道这一点,请帮助我.我正在使用Rails 3.2

shi*_*vam 23

你有一个打印为String的哈希.要将其转换为哈希,请使用eval.

ch = "{\"report_name\"=>\"Study/Control: ABIRATERONE ACETATE - 20151413355\", \"left_mue_start_date\"=>\"02-26-2015\", \"left_mue_end_date\"=>\"03-19-2015\", \"right_mue_start_date\"=>\"02-26-2015\", \"right_mue_end_date\"=>\"03-19-2015\", \"report_formulary_id\"=>\",7581\", \"mue\"=>\"true\", \"mue_type\"=>\"study/control\", \"chain_id\"=>\"1\", \"left_mue_formulary_ids\"=>[\"7581\"], \"action\"=>\"create_report\", \"controller\"=>\"informatics\", \"user_id\"=>339}"
hash = eval(ch)
# => {"report_name"=>"Study/Control: ABIRATERONE ACETATE - 20151413355", "left_mue_start_date"=>"02-26-2015", "left_mue_end_date"=>"03-19-2015", "right_mue_start_date"=>"02-26-2015", "right_mue_end_date"=>"03-19-2015", "report_formulary_id"=>",7581", "mue"=>"true", "mue_type"=>"study/control", "chain_id"=>"1", "left_mue_formulary_ids"=>["7581"], "action"=>"create_report", "controller"=>"informatics", "user_id"=>339} 
Run Code Online (Sandbox Code Playgroud)

PS:JSON字符串应该如下所示,这意味着你拥有的不是JSON,因此你JSON::ParserError可以使用JSON.parse非JSON字符串:

"{\"report_name\":\"Study/Control: ABIRATERONE ACETATE - 20151413355\",\"left_mue_start_date\":\"02-26-2015\",\"left_mue_end_date\":\"03-19-2015\",\"right_mue_start_date\":\"02-26-2015\",\"right_mue_end_date\":\"03-19-2015\",\"report_formulary_id\":\",7581\",\"mue\":\"true\",\"mue_type\":\"study/control\",\"chain_id\":\"1\",\"left_mue_formulary_ids\":[\"7581\"],\"action\":\"create_report\",\"controller\":\"informatics\",\"user_id\":339}" 
Run Code Online (Sandbox Code Playgroud)

  • 请小心使用`eval`,因为它可以在您的系统内部注入恶意代码,具体取决于哈希的来源 (2认同)

Mat*_*nes 5

上次遇到此问题时,由于我从包含 BOM

UTF-8 BOM是字节序列(EF BB BF) ,UTF-8和不带BOM的UTF-8有什么区别?

在该字符串的开头,但是您知道当我们从响应中获得该字符串时,该部分将不会显示或可读。我尝试使用Ruby JSON进行解析,但是失败了,我也遇到了同样的例外。当您收到Json回应时,只是提醒其他人。顺便说一句,当您使用javascript处理代码时,这不会有问题,但是会遇到Python或Ruby语言的问题。


Jua*_*uez 5

为了避免使用,eval您可以使用 JSON.parse ch.gsub('=>', ':')这种方式HASHHASH存储为STRING