2017-11-29 22 views
-2

私のアプリでJSONを使用してウェブサイトからデータを取得したい。しかし、問題は、JSONデータのkey ["posts"]の値を取得しようとするとエラーが表示されることです。ここでスウィフトでJSONを解析するとエラーが発生する4

let url = NSURL(string: "http://bongdavn.com/category/du-lieu/?json=1")! 
let request = NSMutableURLRequest(url: url as URL) 
URLSession.shared.dataTask(with: request as URLRequest) { (data : Data?, urlResponse : URLResponse?, error : Error?) in 
    if error != nil { 
    } 

    do { 
     let json = try JSONSerialization.jsonObject(with: data!) as? [String : Any] 
     let post = json!["post"] as! [String : Any] 
     print(post) 
     let content = post["content"] // error show from here. 

     print(content) 
     // the compiler show nil instead of value of "content" 

     DispatchQueue.main.async { 
      self.TableView.reloadData() 
     } 
    } 
    catch { 
     print("Catch the error : \(error)") 
    } 
} 
.resume() 

は私のJSONデータである:ここで

{ 
    "status":"ok", 
    "post":{ 
     "id":121, 
     "type":"post", 
     "slug":"epl-england-premier-league-anh", 
     "url":"http:\/\/bongdavn.com\/epl-england-premier-league-anh\/", 
     "status":"publish", 
     "title":"[EPL] England Premier League – Anh", 
     "title_plain":"[EPL] England Premier League – Anh", 
     "content":"<p>West Ham <strong><span class=\"hom\">1<\/span>\u00a0&#8211;\u00a0<\/strong><span class=\"awy\"><strong>1<\/strong>\u00a0<\/span>Leicester|||Crystal Palace\u00a0<strong><span class=\"hom\">2<\/span>\u00a0&#8211;\u00a0<\/strong><span class=\"awy\"><strong>1<\/strong>\u00a0<\/span>Stoke|||, 
     "date":"2017-11-29 09:44:13", 
     "modified":"2017-11-29 09:44:16", 
     "categories":[ ], 
     "tags":[ ], 
     "author":{ }, 
     "comments":[ ], 
     "attachments":[ ], 
     "comment_count":0, 
     "comment_status":"open", 
     "custom_fields":{ } 
    }, 
    "previous_url":"http:\/\/bongdavn.com\/bundesliga-dortmund-schalke\/" 
} 

はエラーです:

Could not cast value of type '__NSSingleObjectArrayI' (0x109b9c328) to 'NSDictionary' (0x109b9cf58). 2017-11-29 22:45:19.764169+0700 BongDa[713:17684] Could not cast value of type '__NSSingleObjectArrayI' (0x109b9c328) to 'NSDictionary' (0x109b9cf58). (lldb)

+0

エラーの原因となるコードはどれですか? – rmaddy

+0

ここからcontent = post ["content"]を許可します。助けてください。 –

+0

あなたの質問を 'print(post)'の出力で更新してください。 – rmaddy

答えて

1

あなたのJSONが掲載さが間違っている、私はURLから何を得るによると、そこにあります配列postsなので、次のようにすることができます:

do { 
    let json = try JSONSerialization.jsonObject(with: data!) as? [String : Any] 
    let posts = json!["posts"] as! [[String: Any]] // posts is an array 
    let post = posts.first! // get the first here, or according to your need 
    print(post) 
    let content = post["content"] 
    print(content) 

    DispatchQueue.main.async { 
     self.TableView.reloadData() 
    } 
} 
catch { 
    print("Catch the error : \(error)") 
} 
} 
.resume() 
+0

しかし、OPは、 'let post = json! '[" post "]という行には! [String:Any] 'が動作しています。 – rmaddy

+0

@rmaddy私の答えでは、jsonは異なっています。 – chengsam

+0

ありがとう、時間を節約する。もう一度ありがとうございます。 –

関連する問題