2014-10-07 123 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