Тестирование 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': ' ','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': ' ','Docket Text': '<i>none.</i>'},{'Docket Type': 'RO - REOPEN','Filing Date': '19-AUG-2015','Filing Party': ' ','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': ' ','Docket Text': 'OF DISBURSEMENTS'},{'Docket Type': 'COFT - CERTIFICATE OF TITLE','Filing Date': '01-JUL-2015','Filing Party': ' ','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': ' ','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': ' ','Docket Text': '<i>none.</i>'},{'Docket Type': 'RO - REOPEN','Filing Date': '19-AUG-2015','Filing Party': ' ','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': ' ','Docket Text': 'OF DISBURSEMENTS'},{'Docket Type': 'COFT - CERTIFICATE OF TITLE','Filing Date': '01-JUL-2015','Filing Party': ' ','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"=>" ",
# "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"=>" ",
# "Docket Text"=>"<i>none.</i>"},
# {"Docket Type"=>"RO - REOPEN",
# "Filing Date"=>"19-AUG-2015",
# "Filing Party"=>" ",
# "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"=>" ",
# "Docket Text"=>"OF DISBURSEMENTS"},
# {"Docket Type"=>"COFT - CERTIFICATE OF TITLE",
# "Filing Date"=>"01-JUL-2015",
# "Filing Party"=>" ",
# "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 должен уметь разбираться, если достаточно шаги декодирования.
Вы можете распечатать значение 'response ['data']' from ruby и показать нам вывод этого оператора? – Sculper
@Sculper я распечатал это выше. У меня это в желтой коробке. – Donato
Обратные косые черты ('F \ B') вызывают его недействительность. Это в основном отменяет цитаты. –