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

当前的哈希是

{\"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} 

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

 {"report_name" => "Study/Control: ABIRATERONE ACETATE - 20151413355"} 

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

 JSON::ParserError: 757: unexpected token at '{ 

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

你有一个打印为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} 

PS:JSON字符串应如下所示,这意味着您拥有的不是JSON,因此您在非JSON字符串上使用JSON.parse时获得了JSON::ParserError

 "{\"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}" 

上次我遇到这个问题,因为我从包含BOM的API获得了json文件

UTF-8 BOM是一个字节序列(EF BB BF) 没有BOM的UTF-8和UTF-8有什么不​​同?

在该字符串的开头,但是当我们从响应中获取字符串时,您知道该部分不会显示或可读。 我尝试使用Ruby JSON来解析它,但是我失败了,我和你的一样有exception。 当你得到Json的回应时,只是提醒别人。 顺便说一下,当你在javascript中处理它时,这将没有问题,但是在Python或Ruby语言中存在问题。

为了避免使用eval你可以使用JSON.parse ch.gsub('=>', ':')这样你就可以从你的HASH获得一个HASH存储为STRING

我遇到了类似的问题,虽然它在解析\“\”时失败了。 这与使用Pact.IO有关。 我在这里提到它,因为这是排名最高的谷歌搜索结果,同时寻找我遇到的错误。 在我的情况下,解决方案是在我的C#应用​​程序中更改POST的主体,以便它不使用空字符串,而是使用空字符串。 基本上我在HTTP调用之前添加了这个。

 if (request.Method == HttpMethod.Post && request.Content!=null && request.Content.GetType()==typeof(StringContent) && request.Content.ReadAsStringAsync().Result == String.Empty) request.Content = new StringContent(null);