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

时间:2015-03-14 08:41:48

标签: ruby-on-rails ruby 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}

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

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

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

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

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

4 个答案:

答案 0 :(得分:19)

你所拥有的是一个打印为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::ParserError得到了JSON.parse

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

答案 1 :(得分:4)

上次出现此问题时,由于我从包含BOM的API获取的json文件

  

UTF-8 BOM是一个字节序列(EF BB BF)   What's different between UTF-8 and UTF-8 without BOM?

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

答案 2 :(得分:4)

为了避免使用button.setOnClickListener { button.startAnimation(AnimationUtils.loadAnimation(context, R.anim.shake) } ,您可以eval这样使用JSON.parse ch.gsub('=>', ':') HASH存储为HASH

答案 3 :(得分:0)

我遇到了类似的问题,虽然它在解析\“\”时失败了。这与使用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);