在Swift中用Alamofire解析JSON响应
问题描述:
当使用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。
答
那些钥匙仍然是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";
};
}
);
}
混乱了'NSLog' /'的println您可以通过手动创建类似于你从你的API请求取回的一个
Dictionary
,然后打印测试此'表示不正确JSON是我多次注意到的。我想知道如何去记录或澄清这个... – mattt 2014-10-07 15:50:22(相关的,我最近看到有人对'NSData'的日志输出表示困惑,“为什么当我想要文本时得到数字?”是公平的,一个合理的问题) – mattt 2014-10-07 15:51:53
@mattt是的,我已经看到它相当多。我认为这个问题的一部分是,在SO上搜索是一件困难的事情;也许一些更好的问题标题会有所帮助,但我想不到一个好的问题。我想知道是否在Alamofire的相关章节(和AFNetworking的)README.md中提供一个注释来解决这个问题?我知道它与这些图书馆没有任何关系,它会有点不合适,但它会给这个问题一些可见性,因为这些图书馆非常流行(好的工作BTW;))。 – 2014-10-07 16:41:09