2

使用 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 和 ruby​​ 中尝试了相同的端点,并且都没有问题地返回,所以我相当有信心这不是导致问题的 API。

4

1 回答 1

2

那些键仍然String是 s,这就是Dictionarys 是printlnd 的方式。String只有当它包含非字母数字字符(_在这种情况下)时,它才会在打印时将引号括起来。您可以通过手动创建Dictionary与您从 API 请求中返回的类似然后打印它来测试这一点:

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";
            };
        }
    );
}
于 2014-10-07T15:22:52.433 回答