2015-03-14 3 views
4

текущего хэша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

ответ

17

У вас есть хэш, напечатанный как 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::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}" 
+2

Просто будьте осторожны, используя 'eval', поскольку он может внедрить вредоносный код в вашей системе в зависимости от того, где ваш хэш получается от –

+0

. 'eval' всегда опасен. – shivam

4

Последний раз, когда я получил этот вопрос, так как файл JSON, который я получил от API, который содержит BOM

UTF-8 BOM is a sequence of bytes (EF BB BF) What's different between UTF-8 and UTF-8 without BOM?

в начале этой строки, но вы знаете й на части не будет отображаться или читаться, когда мы получим строку от ответа. Я пытаюсь использовать Ruby JSON для его синтаксического анализа, но я потерпел неудачу, я получил то же исключение с вашим. просто напоминание для других, когда вы получаете ответ Json. Кстати, это не проблема, когда вы обрабатываете это в javascript, но с проблемами на языках Python или Ruby.

0

У меня возникла аналогичная проблема, хотя при разборе синтаксического анализа это не получилось. Это касается использования Pact.IO. Я упоминаю это здесь, так как это самый высокий рейтинг результатов Google, ища ошибку, с которой я столкнулся. Решение в моем случае состояло в том, чтобы изменить тело POST в моем приложении C#, чтобы оно не использовало пустую строку, а пустую строку. В основном я добавил это перед моим 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); 
0

Чтобы избежать использования eval вы можете использовать JSON.parse ch.gsub('=>', ':') таким образом, вы получите HASH от вашего HASH хранится в виде STRING

Смежные вопросы