2014-10-07 3 views
2

При использовании Alamofire Framework мои ответы, похоже, не обрабатываются правильно. Ответ JSON, который я получаю, имеет некоторые ключи, которые, как представляется, не являются строками, и я не знаю, как ссылаться на них/получать их значения.Анализ JSON-ответа с использованием Alamofire в Swift

Вот часть моего кода, который делает вызов:

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, который вызывает проблемы.

ответ

1

Эти ключи все еще String s, вот как Dictionary s is println d. Похоже, что он будет окружать 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"; 
      }; 
     } 
    ); 
} 
+0

Путаница над 'NSLog' /' Println Недопустимое представление JSON - это то, что я заметил во многих случаях. Интересно, как можно документировать или разъяснять это ... – mattt

+0

(Связано, я видел, что кто-то недавно выражал путаницу в выходе журнала NSData. «Почему я получаю цифры, когда хочу текст?» Справедливо, разумный вопрос) – mattt

+0

@mattt Да, я видел это совсем немного. Я думаю, что часть проблемы заключается в том, что искать SO на жестком уровне сложно; возможно, некоторые лучшие вопросы будут помогать, но я не могу думать о хорошем. Интересно, поможет ли эта запись в соответствующем разделе README.md Alamofire (и AFNetworking's) в отношении этого? Я знаю, что это не имеет ничего общего с этими библиотеками, и это будет немного неуместно, но это придаст проблеме некоторую видимость, поскольку эти библиотеки настолько популярны (хорошая работа BTW;)). –