2016-09-05 11 views
-2

で配列することなく、私は以下のようなコードを解析JSONを働いてきたが、それは、配列を取り、それを使用するときに私を与えます。JSONの解析迅速

型の値をキャストすることができませんでした '__NSCFDictionary'(0x10ad77178) 'にNSArray'(0x10ad76b88)エラー

私のJSONファイル(だけ私のJSON内の小数点以下の値を変更します)

{ 
    "One": 30.00, 
    "Two": 6.00, 
    "Two2": 36.00 
} 
には、

  let url:NSURL = NSURL(string: "http://url.com")! 
      let session = NSURLSession.sharedSession() 

      let request = NSMutableURLRequest(URL: url) 
      let task = session.downloadTaskWithRequest(request) { 
       (
       let location, let response, let error) in 

       guard let _:NSURL = location, let _:NSURLResponse = response where error == nil else { 
        print("error") 
        return 
       } 

       let urlContents = try! NSString(contentsOfURL: location!, encoding: NSUTF8StringEncoding) 

       guard let _:NSString = urlContents else { 
        print("error") 
        return 
       } 

       let data = urlContents.dataUsingEncoding(NSUTF8StringEncoding) 
       do { 
        let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) 

        for name in json as! [AnyObject] { 
         if let Onebir = name["One"] as? String { 
          self.One1.text = Onebir 

         } 

        } 

        for names in json as! [AnyObject] { 
         if let Twoiki = names["Two"] as? String { 
          self.Two2.text = Twoiki 

         } 

        } 

        for namesu in json as! [AnyObject] { 
         if let Two2uc = namesu["Two2"] as? String { 
          self.Two23.text = Two2uc 

         } 

        } 



       } catch { 
        print("error serializing JSON: \(error)") 
       } 





      } 

      task.resume() 

以下の下

マイスウィフトコード私は名前を削除しようとします。 。名前のために..名前のために..それは解決しなかった。

私は、明確な得る。このような出力をしたいする必要があります。

self.One1.text = 30.00 
self.Two2.text = 6.00 
self.Two23.text = 36.00 
+1

うーん...優しいアドバイス、チームメイト: 'ガードが聞かせて_:NSURL =場所、聞かせて_:NSURLResponse = response' ...'ガードしましょう_:NSStringの= urlContents else'私はこのコードこと週間前にあなたを伝える覚え悪名高い悪質なブログから来ている、絶対にばかげている - 私はあなたがそれを使用し続けて驚いている!これ以上使用しないことを検討してください。このような 'guard'を使うことは間違っています。あなたは2回の作業をしています! :)これよりもはるかに優れているので、既存の例を見てください。 – Moritz

答えて

1

あなたの応答は、ので、あなたの価値がfloatタイプではないStringでも、このようなDictionaryにアクセスDictionaryないArrayです。

let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as [String: Float] 

dispatch_async(dispatch_get_main_queue(),{ 
    self.One1.text = "\(json["One"])" 
    self.Two2.text = "\(json["Two"])" 
    self.Two3.text = "\(json["Two2"])" 
}) 
+0

男はうまく働いた!ハッピー – SwiftDeveloper

+0

ようこそメイト、私はthatsの更新はどのように私はしっかりと値を取得することができます後約10〜15 secodsをテキスト実行する]ボタンをクリックしたときに:) –

+0

メイトもコーディング?私のコードは正しい? – SwiftDeveloper

1

エラーは、それ自体が、あなたが取得しようとしている応答がないNSArrayNSDictionaryの形であることを示しています。

はおそらく[]角括弧はArrayにデータを提供し、常にdictionaryはそうあなたがそれについて意識しなければなりません含まれてい{}中括弧に署名します。