2016-01-25 4 views
0

У меня есть массив объектов, которые я отправляю в REST API для получения информации об этих объектах. Для этого я использую RestClient со следующими строками для отправки вызова и анализа ответа.Как получить RestClient в рубине для правильного форматирования ответов со специальными символами?

response_raw = RestClient.get "http://#{re_host}:#{re_port}/reachengine/api/inventory/search?rql=fCSAssetNumber=#{fcs_id_num}%20size%20#{size}%20&apiKey=#{api_key}", headers 
response_json = Crack::JSON.parse(response_raw) 
response_json['results'].each do |result| 

Для первых 20+ записей я выполняю это действие, все работает нормально. Тогда я начинаю получить NoMethodError: неопределенный метод `[]» для ноль: NilClass

Когда я запускаю шаг кода за шагом в IRB, что я вижу в результатах очень странно

result = response_json['results'][0] 
>=> {"name"=>"Publicaciòn_Listin_Diario.png", " id"=>" 294290", " dateCreated"=>" 2015-09-20T20:35:06.000+0000", " dateUpdated"=>" 2015-12-23T19:33:13.000+0000", " systemKeywords"=>" Publicaciòn_Listin_Diario.png Image ", "t humbnailId"=>"4 24725", "m etadata"=>{" sourceFilePath"=>"/ Volumes/ONLINE_DAM/MEDIA/RAW_GRAPHICS/1307001_August_2013_KOS/Publicaciòn_Listin_Diario.png", "pa MdCustAgency_picklist_sortable"=>"nul l", "th umbnailAssetFlag"=>"fal se", "re storeKey"=>"nul l", "ar chiveStatus_picklist_sortable"=>"nul l", "fC SAssetNumber"=>"18 2725", "fC SMetadataSet"=>"Ra w Graphic", "cu stKeywords"=>"Do minican Republic Cycling Team, 1307001 August 2013 KOS Kickoff show", "cu stAssetStatus_picklist_sortable"=>"nul l", "se archableFlag"=>"fal se", "as setType"=>"Im age", "pa MdCustHerbalifeJobNumber"=>"13 07001", "da teCreated"=>"20 15-09-20T20:35:06", "da teLocked"=>"nul l", "uu id"=>"30 9d9bb3-6935-4ab6-a04a-ef7264132bc6", "ve rsionFlag"=>"nul l", "ag ency_picklist_sortable"=>"nul l", "pr oducer_picklist_sortable"=>"nul l", "tr uncatedFlag"=>"fal se", "cu stDescription"=>"*R aw Graphics for 1307001_August_2013_KOS"}, "in ventoryKey"=>"im age"} 

Обычно , с этим ответом я могу запустить результат ['metadata'] ['fCSAssetNumber']

Однако; из-за случайных пробелов это не выполняется с помощью метода NoMethodError: undefined `[] 'для nil: NilClass, потому что вместо строки, являющейся« метаданными », это фактически« m etadata ».

Что действительно странно в отношении всех это и почему это вопрос Руби и не легко определяется как проблема АНИ является то, что точно такой же вызов, сделанный с помощью почтальона REST Client в хромовых возвращает этот результат:

>{ 
    "results": [ 
    { 
     "name": "Publicaciòn_Listin_Diario.png", 
     "id": "294290", 
     "dateCreated": "2015-09-20T20:35:06.000+0000", 
     "dateUpdated": "2015-12-23T19:33:13.000+0000", 
     "systemKeywords": "Publicaciòn_Listin_Diario.png Image ", 
     "thumbnailId": "424725", 
     "metadata": { 
     "sourceFilePath": "/Volumes/ONLINE_DAM/MEDIA/RAW_GRAPHICS/1307001_August_2013_KOS/Publicaciòn_Listin_Diario.png", 
     "paMdCustAgency_picklist_sortable": null, 
     "thumbnailAssetFlag": false, 
     "restoreKey": null, 
     "archiveStatus_picklist_sortable": null, 
     "fCSAssetNumber": "182725", 
     "fCSMetadataSet": "Raw Graphic", 
     "custKeywords": "Dominican Republic Cycling Team, 1307001 August 2013 KOS Kickoff show", 
     "custAssetStatus_picklist_sortable": null, 
     "searchableFlag": false, 
     "assetType": "Image", 
     "paMdCustHerbalifeJobNumber": "1307001", 
     "dateCreated": "2015-09-20T20:35:06", 
     "dateLocked": null, 
     "uuid": "309d9bb3-6935-4ab6-a04a-ef7264132bc6", 
     "versionFlag": null, 
     "agency_picklist_sortable": null, 
     "producer_picklist_sortable": null, 
     "truncatedFlag": false, 
     "custDescription": "*Raw Graphics for 1307001_August_2013_KOS" 
     }, 
     "inventoryKey": "image" 
    } 
    ], 
    "total": "1" 
} 

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

Ниже приведен образец ответа от того же самого рубинового вызова, который действительно работал.

result = response_json['results'][0] 
=> {"name"=>"Marco_1er_dia.png", "id"=>"294284", "dateCreated"=>"2015-09-`20T20:34:54.000+0000", "dateUpdated"=>"2015-12-23T19:33:10.000+0000", "systemKeywords"=>"Marco_1er_dia.png Image ", "thumbnailId"=>"424716", "metadata"=>{"sourceFilePath"=>"/Volumes/ONLINE_DAM/MEDIA/RAW_GRAPHICS/1307001_August_2013_KOS/Marco_1er_dia.png", "paMdCustAgency_picklist_sortable"=>nil, "collectionMemberships"=>"320 321", "thumbnailAssetFlag"=>false, "restoreKey"=>nil, "fCSMetadataSet"=>"Raw Graphic", "fCSAssetNumber"=>"182722", "archiveStatus_picklist_sortable"=>nil, "custAssetStatus_picklist_sortable"=>nil, "custKeywords"=>"1307001 August 2013 KOS Kickoff show, Dominican Republic Cycling Team", "searchableFlag"=>false, "assetType"=>"Image", "paMdCustHerbalifeJobNumber"=>"1307001", "dateCreated"=>"2015-09-20T20:34:54", "dateLocked"=>nil, "uuid"=>"b5e55c14-b94e-4629-9e2a-61a2dc0876f6", "versionFlag"=>nil, "fCSProductionStatus_picklist_sortable"=>nil, "agency_picklist_sortable"=>nil, "producer_picklist_sortable"=>nil, "truncatedFlag"=>false, "custDescription"=>"*Raw Graphics for 1307001_August_2013_KOS"}, "inventoryKey"=>"image"}` 

Обратите внимание, что ответ выше не имеет проблемы с интервалом? Единственное явное различие, которое я вижу здесь, заключается в том, что в имени файла есть специальный символ: ò Есть ли что-то конкретное, что мне нужно сделать для RESTClient для работы с этим?

У кого-нибудь есть идеи, как это можно исправить?

ответ

0

Вопрос был связан с драгоценным камнем «трещины». Я использовал это в течение длительного времени. По-видимому, с Ruby 1.9 метод parse доступен в стандартном классе JSON. Когда я перешел на использование, изменив

response_json = Crack::JSON.parse(response_raw) 

в

response_json = JSON.parse(response_raw) 

вопрос ушел.