如何让ruby中的RestClient正确格式化带有特殊字符的响应?

如何让ruby中的RestClient正确格式化带有特殊字符的响应?,ruby,rest-client,Ruby,Rest Client,我将有一个对象数组发送到RESTAPI,以接收关于这些对象的返回信息。为此,我使用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 re

我将有一个对象数组发送到RESTAPI,以接收关于这些对象的返回信息。为此,我使用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多条记录,一切正常。然后,我开始为nil:nil类获取一个NoMethodError:undefined方法“[]”

当我在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']

但是,;由于随机空间的存在,对于nil:NilClass,使用“NoMethodError:undefined method`[]”失败,因为字符串不是“metadata”,而是“m etadata”

所有这一切真正奇怪的是,为什么这是一个Ruby问题,并且不容易确定是API的问题,是通过chrome中的Postman REST客户端进行的相同调用返回了以下结果:

>{
  "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"
}
从上面可以看到,当邮递员运行相同的呼叫时,响应没有问题,但是当ruby运行呼叫时,响应就有问题。还要注意的是,这种情况并非总是发生

下面是实际工作的同一个ruby调用的响应示例

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做些什么来处理这个问题吗


有人知道如何解决这个问题吗

该问题与“裂纹”宝石有关。我用这个很久了。显然,从Ruby 1.9开始,标准JSON类上已经有了解析方法。当我改变习惯使用这个的时候

response_json = Crack::JSON.parse(response_raw)

这个问题消失了

response_json = JSON.parse(response_raw)