2017-03-03 8 views
0

iOSプロジェクトにログインAPIを統合しようとしています。私はブラウザでそのAPIをヒットすると、正しいJSON応答が得られます。私のアプリでそれを呼び出すと、私はJSONを読むことができません。ブラウザでヒットAPIのAPIレスポンスのデータを読み込む| iOS

private func jsonFromData(jsonData: NSData) throws -> [NSDictionary]? 
{ 
    var jsonDict: [NSDictionary]? = nil 
    do 
    { 
     jsonDict = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.AllowFragments) as? [NSDictionary] 
    } 
    catch 
    { 
     throw(error) 
    } 

    return jsonDict 
} 

レスポンスは、通りである:よう

let url = NSURL(string: "myURL") 
let request = NSURLRequest(URL: url!) 
let session = NSURLSession.sharedSession() 
let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in 

    if error != nil { 
      print (error) 
    } 
     do { 
     //jsonDict is always nil 
     if let jsonDict = try self.jsonFromData(data!) { 
      print (jsonDict) 
     } 
     } 
     catch { 
      print ("hi") 
     }  
    } 

jsonFromDataは次のとおりです。

enter image description here

私を助けてください何を私、ようなコードがあります間違っている。ありがとう。

更新日: データをStringに変換すると、正しい値が返されます。すなわち

let string = NSString(data: jsonData, encoding: NSASCIIStringEncoding) 
print (string) 
//OUTPUT: Optional({"Authenticated":true,"CustomerID":000,"CustomerName":"TEMP","Members":[{"MemberID":000,"MemberNumber":"000","MembershipID":00,"MembershipExpiration":"\/Date(1517464799000-0600)\/","ValidBuyerTypes":[0]}]}) 

答えて

1

JSONとasをデコードするコードを見てください。ステートメント。あなたはNSDictionaryの配列を取得しようとしています。印刷されたJSONには配列ではなく、1つの辞書が含まれています。

0

代わりNSKeyedUnarchiverを使用してみてください:

jsonDict = NSKeyedUnarchiver.unarchiveObjectWithData(jsonData)! as NSDictionary 
1

は、これは私には右に見えます。私が考えることができるのは、(文字列の出力がどのようなものであっても)応答のトップレベルのコンテナはではなく、NSDictionaryです。

let iDunnoWhatThisIs = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.AllowFragments) // don't cast this to NSDictionary 

を、あなたが戻って得るものを参照してください:あなたのjsonFromData機能では、代わりにJSONObjecWithDataの結果を想定してのNSDictionaryだろう、私は言うでしょう。しかし、それは辞書または配列のいずれかでなければなりません。オプションのためにNSJSONReadingOptions.AllowFragmentsが設定されているので、それは完全に別のものかもしれません。あなたが実際にあなたがいると仮定しているものを取り戻してそこから行くことを確かめることから始めます。

+0

はい、この方法で問題を解決しました。応答は文字列で(おそらく)でした。文字列を辞書に型キャストしました。私の答えも分かち合います。 –

関連する問題