2015-08-26 3 views
0

Когда я использую JSON.parse(response['data']), Ruby вызывает ошибку:Рубин парсинг JSON выдает ошибку неперехваченным исключение: 399: неожиданный маркер

Uncaught exception: 399: unexpected token at ... 

И я не знаю, почему. В casperjs, я повторяю следующий назад Ruby:

this.echo('{"data": '+ JSON.stringify(resultFinal) + '}'); 

использую JSON.stringify для кодирования строки, что дает следующее:

{"data": "[{'Docket Type': 'MOT - MOTION','Filing Date': '19-AUG-2015','Filing Party': 'PNC BANK, NATIONAL ASSOCIATION,','Docket Text': 'TO GRANT WRIT OF POSSESSION FOR FAILURE TO VACATE PREMISES F\\B PLT, PNC BANK'},{'Docket Type': 'AFF - AFFIDAVIT','Filing Date': '19-AUG-2015','Filing Party': '&nbsp;','Docket Text': 'PURSUANT TO SECTION 83.561, FLORIDA STATUTES F\\B PLT, PNC'},{'Docket Type': '108FF - CAFF/REOPEN ($50.00)','Filing Date': '19-AUG-2015','Filing Party': '&nbsp;','Docket Text': '<i>none.</i>'},{'Docket Type': 'RO - REOPEN','Filing Date': '19-AUG-2015','Filing Party': '&nbsp;','Docket Text': '<i>none.</i>'},{'Docket Type': 'COS - CERTIFICATE OF SERVICE','Filing Date': '14-JUL-2015','Filing Party': 'NATIONAL CITY BANK,','Docket Text': 'OF ORDER ON OBJECTION TO FORECLOSURE SALE F/B PLT'},{'Docket Type': 'CRT - CERTIFICATE','Filing Date': '01-JUL-2015','Filing Party': '&nbsp;','Docket Text': 'OF DISBURSEMENTS'},{'Docket Type': 'COFT - CERTIFICATE OF TITLE','Filing Date': '01-JUL-2015','Filing Party': '&nbsp;','Docket Text': 'WAS SOLD TO PNC BANK NATIONAL ASSOCIATION'}]"} 

Правильно закодированы в виде строки JSON, Руби JSON.parse должны иметь возможность разобрать его. Так почему это терпит неудачу?

+0

Вы можете распечатать значение 'response ['data']' from ruby ​​и показать нам вывод этого оператора? – Sculper

+0

@Sculper я распечатал это выше. У меня это в желтой коробке. – Donato

+0

Обратные косые черты ('F \ B') вызывают его недействительность. Это в основном отменяет цитаты. –

ответ

0

Тестирование JSON не показывает никаких проблем:

require 'json' 

str = <<EOT 
{"data": "[{'Docket Type': 'MOT - MOTION','Filing Date': '19-AUG-2015','Filing Party': 'PNC BANK, NATIONAL ASSOCIATION,','Docket Text': 'TO GRANT WRIT OF POSSESSION FOR FAILURE TO VACATE PREMISES F\\B PLT, PNC BANK'},{'Docket Type': 'AFF - AFFIDAVIT','Filing Date': '19-AUG-2015','Filing Party': '&nbsp;','Docket Text': 'PURSUANT TO SECTION 83.561, FLORIDA STATUTES F\\B PLT, PNC'},{'Docket Type': '108FF - CAFF/REOPEN ($50.00)','Filing Date': '19-AUG-2015','Filing Party': '&nbsp;','Docket Text': '<i>none.</i>'},{'Docket Type': 'RO - REOPEN','Filing Date': '19-AUG-2015','Filing Party': '&nbsp;','Docket Text': '<i>none.</i>'},{'Docket Type': 'COS - CERTIFICATE OF SERVICE','Filing Date': '14-JUL-2015','Filing Party': 'NATIONAL CITY BANK,','Docket Text': 'OF ORDER ON OBJECTION TO FORECLOSURE SALE F/B PLT'},{'Docket Type': 'CRT - CERTIFICATE','Filing Date': '01-JUL-2015','Filing Party': '&nbsp;','Docket Text': 'OF DISBURSEMENTS'},{'Docket Type': 'COFT - CERTIFICATE OF TITLE','Filing Date': '01-JUL-2015','Filing Party': '&nbsp;','Docket Text': 'WAS SOLD TO PNC BANK NATIONAL ASSOCIATION'}]"} 
EOT 

JSON[str] 
# => {"data"=> 
#  "[{'Docket Type': 'MOT - MOTION','Filing Date': '19-AUG-2015','Filing Party': 'PNC BANK, NATIONAL ASSOCIATION,','Docket Text': 'TO GRANT WRIT OF POSSESSION FOR FAILURE TO VACATE PREMISES FB PLT, PNC BANK'},{'Docket Type': 'AFF - AFFIDAVIT','Filing Date': '19-AUG-2015','Filing Party': '&nbsp;','Docket Text': 'PURSUANT TO SECTION 83.561, FLORIDA STATUTES FB PLT, PNC'},{'Docket Type': '108FF - CAFF/REOPEN ($50.00)','Filing Date': '19-AUG-2015','Filing Party': '&nbsp;','Docket Text': '<i>none.</i>'},{'Docket Type': 'RO - REOPEN','Filing Date': '19-AUG-2015','Filing Party': '&nbsp;','Docket Text': '<i>none.</i>'},{'Docket Type': 'COS - CERTIFICATE OF SERVICE','Filing Date': '14-JUL-2015','Filing Party': 'NATIONAL CITY BANK,','Docket Text': 'OF ORDER ON OBJECTION TO FORECLOSURE SALE F/B PLT'},{'Docket Type': 'CRT - CERTIFICATE','Filing Date': '01-JUL-2015','Filing Party': '&nbsp;','Docket Text': 'OF DISBURSEMENTS'},{'Docket Type': 'COFT - CERTIFICATE OF TITLE','Filing Date': '01-JUL-2015','Filing Party': '&nbsp;','Docket Text': 'WAS SOLD TO PNC BANK NATIONAL ASSOCIATION'}]"} 

Я на Руби 2.2.3.


Проблема заключается в том, что строка JSON используется для передачи другой JSON строки, которая была его ожидаемые двойные кавычки преобразуются в одинарные кавычки. Преобразование их обратно:

hash = JSON[str] 
JSON[hash['data'].tr("'", '"')] 
# => [{"Docket Type"=>"MOT - MOTION", 
#  "Filing Date"=>"19-AUG-2015", 
#  "Filing Party"=>"PNC BANK, NATIONAL ASSOCIATION,", 
#  "Docket Text"=> 
#  "TO GRANT WRIT OF POSSESSION FOR FAILURE TO VACATE PREMISES FB PLT, PNC BANK"}, 
#  {"Docket Type"=>"AFF - AFFIDAVIT", 
#  "Filing Date"=>"19-AUG-2015", 
#  "Filing Party"=>"&nbsp;", 
#  "Docket Text"=> 
#  "PURSUANT TO SECTION 83.561, FLORIDA STATUTES FB PLT, PNC"}, 
#  {"Docket Type"=>"108FF - CAFF/REOPEN ($50.00)", 
#  "Filing Date"=>"19-AUG-2015", 
#  "Filing Party"=>"&nbsp;", 
#  "Docket Text"=>"<i>none.</i>"}, 
#  {"Docket Type"=>"RO - REOPEN", 
#  "Filing Date"=>"19-AUG-2015", 
#  "Filing Party"=>"&nbsp;", 
#  "Docket Text"=>"<i>none.</i>"}, 
#  {"Docket Type"=>"COS - CERTIFICATE OF SERVICE", 
#  "Filing Date"=>"14-JUL-2015", 
#  "Filing Party"=>"NATIONAL CITY BANK,", 
#  "Docket Text"=>"OF ORDER ON OBJECTION TO FORECLOSURE SALE F/B PLT"}, 
#  {"Docket Type"=>"CRT - CERTIFICATE", 
#  "Filing Date"=>"01-JUL-2015", 
#  "Filing Party"=>"&nbsp;", 
#  "Docket Text"=>"OF DISBURSEMENTS"}, 
#  {"Docket Type"=>"COFT - CERTIFICATE OF TITLE", 
#  "Filing Date"=>"01-JUL-2015", 
#  "Filing Party"=>"&nbsp;", 
#  "Docket Text"=>"WAS SOLD TO PNC BANK NATIONAL ASSOCIATION"}] 

JSON представляет собой определенный формат и должен следовать the specification. Строки разделяются двойными кавычками:

A value can be a string in double quotes, or a number, or true or false or null, or an object or an array. These structures can be nested.

Кодирование JSON в JSON является ненормальным, но, очевидно, кто-то делают это (неправильно). Я думаю, что он должен быть закодирован в base64, чтобы избежать возможности коррупции или необходимости переводить кавычки, которые неизбежно терпят неудачу или приводят к дальнейшим махинациям, чтобы получить исходные данные.

Альтернативный это позволить JSON парсер сериализации сами данные, которые он будет делать с помощью экранированных символов:

require 'json' 

foo = JSON[{'a' => 'b'}] 
JSON[ {'bar' => foo }] # => "{\"bar\":\"{\\\"a\\\":\\\"b\\\"}\"}" 

Какой будет выглядеть:

{"bar":"{\"a\":\"b\"}"} 

в реальной жизни.

Извлечение данных становится гораздо проще:

JSON[bar] # => {"bar"=>"{\"a\":\"b\"}"} 
JSON[bar]['bar'] # => "{\"a\":\"b\"}" 
JSON[bar]['bar']['a'] # => "a" 

Имея декодировать несколько раз это «происки» я имею в виду. И очевидным недостатком этого является то, что будет происходить растущая ситуация «склонности к зубочистке», которая может стать довольно уродливой, но если с ними не будет с ними общаться во время передачи данных, тогда JSON должен уметь разбираться, если достаточно шаги декодирования.

+0

вы разбираете всю строку. Я пытаюсь проанализировать str ["data"] после разбора самой str. Он выдает ошибку при анализе str ["data"]. – Donato

+0

См. Дополнительную информацию. –

+0

Да, это было решение JSON [hash ['data']. Tr ("'",' '')] – Donato

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