2014-10-07 120 views
2

當使用Alamofire框架時,我的響應似乎沒有得到正確解析。我得到的JSON響應有一些鍵看起來不是字符串,我不知道如何引用它們/獲取它們的值。在Swift中用Alamofire解析JSON響應

這裏是我的代碼的一部分,使呼叫:

var url = "http://api.sandbox.amadeus.com/v1.2/flights/low-fare-search" 
var params = ["origin": "IST", 
     "destination":"BOS", 
     "departure_date":"2014-10-15", 
    "number_of_results": 1, 
       "apikey": KEY] 

Alamofire.request(.GET, url, parameters: params) 
    .responseJSON { (_, _, json, _) in 
    println(json) 
    } 
} 

這裏是當該功能被稱爲

Optional({ 
    currency = USD; 
    results = ({ 
     fare = { 
     "price_per_adult" = { 
      tax = "245.43"; 
      "total_fare" = "721.43"; 
     }; 
     restrictions = { 
      "change_penalties" = 1; 
      refundable = 0; 
     }; 
     "total_price" = "721.43"; 
     }; 
    ... 
    }); 
}); 

你會發現,results不是第一款打印"results",但"price_per_adult"是正確的格式。有沒有我失蹤的一些步驟?當我將它轉換爲NSDictionary時,它也不會做任何事情來幫助密鑰格式。

我也嘗試了相同的端點在JavaScript和紅寶石,並且都回來沒有問題,所以我相當確信它不是造成問題的API。

回答

1

那些鑰匙仍然是String s,那就是如何Dictionary s是println d。它看起來像只在包含非字母數字字符(在這種情況下爲_)時纔會在引號中包圍String

let test = [ 
    "currency": "USD", 
    "results": [ 
     [ 
      "fare": [ 
       "price_per_adult": [ 
        "tax": "245.43", 
        "total_fare": "721.43" 
       ], 
       "restrictions": [ 
        "change_penalties": 1, 
        "refundable": 0 
       ], 
       "total_price": "721.43" 
      ] 
     ] 
    ] 
] 

println(test) 

輸出:

{ 
    currency = USD; 
    results = (
    { 
      fare = { 
       "price_per_adult" = { 
        tax = "245.43"; 
        "total_fare" = "721.43"; 
       }; 
       restrictions = { 
        "change_penalties" = 1; 
        refundable = 0; 
       }; 
       "total_price" = "721.43"; 
      }; 
     } 
    ); 
} 
+0

混亂了'NSLog' /'的println您可以通過手動創建類似於你從你的API請求取回的一個Dictionary,然後打印測試此'表示不正確JSON是我多次注意到的。我想知道如何去記錄或澄清這個... – mattt 2014-10-07 15:50:22

+0

(相關的,我最近看到有人對'NSData'的日誌輸出表示困惑,「爲什麼當我想要文本時得到數字?」是公平的,一個合理的問題) – mattt 2014-10-07 15:51:53

+0

@mattt是的,我已經看到它相當多。我認爲這個問題的一部分是,在SO上搜索是一件困難的事情;也許一些更好的問題標題會有所幫助,但我想不到一個好的問題。我想知道是否在Alamofire的相關章節(和AFNetworking的)README.md中提供一個註釋來解決這個問題?我知道它與這些圖書館沒有任何關係,它會有點不合適,但它會給這個問題一些可見性,因爲這些圖書館非常流行(好的工作BTW;))。 – 2014-10-07 16:41:09