2016-11-17 8 views
0

最近私はJSONを扱っていて、毎日新しい問題に遭遇しています。 StackOverflowの仲間は私を大いに助けてくれて、ありがとう。JSONを見つけたときにJSONを処理する方法

アプリが正常に動作していました。ゼロJSONが返されます。ここで** ** post_imgの内部には、GUIDありませんあなたが見ることができるJSONリターンの第二のチャンクでここリターン

{ 
"main_content" : [ 
{ 
    "author" : "maruf khandakar", 
    "post_id" : 110, 
    "post_date" : "October 3, 2016", 
    "title" : "hjhjhjhjkljkhasfreiwutb cltjutjuregjre nb", 
    "show_comment_number" : "0", 
    "show_likes" : "0", 
    "post_img" : [ 
    { 
     "guid" : "http:\/\/xxx\/wp-content\/uploads\/2016\/10\/IMG_1475492476.jpg" 
    } 
    ], 
    "author_img" : "http:\/\/xxx\/wp-content\/uploads\/2016\/10\/Screenshot_1-2.png", 
    "post_time" : "11:01 am", 
    "blog_text" : "sfdhjusolidasfjgfkdsjfdklshfj" 
}, 

{ 
    "author" : "maruf khandakar", 
    "post_id" : 149, 
    "post_date" : "November 17, 2016", 
    "title" : "Test", 
    "show_comment_number" : "0", 
    "show_likes" : "0", 
    "post_img" : [ 

    ], 
    "author_img" : "http:\/\/xxx\/wp-content\/uploads\/2016\/10\/Screenshot_1-2.png", 
    "post_time" : "4:03 am", 
    "blog_text" : "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip" 
    } 
    ] 
} 

JSONです。したがって、私の配列がこれを繰り返してを反復すると、クラッシュします。ここで私は

import Foundation 
import SwiftyJSON 

class HomeFeedJSON { 

    var title: String? 
    var author_img: URL? 
    var author: String? 
    var blog_text: String? 
    var post_img: URL? 
    var likesNumber: Int? 
    var commentNumber:Int? 

    init(items: JSON){ 
     self.author = items["author"].stringValue 
     self.author_img = items["author_img"].URL 
     self.title = items["title"].stringValue 
     self.blog_text = items["blog_text"].stringValue 
     let post_imgAA = items["post_img"].array 
     for itemsIMG in post_imgAA! { 
     self.post_img = itemsIMG["guid"].URL 
     } 
     self.likesNumber = items["show_likes"].intValue 
     self.commentNumber = items["show_comment_number"].intValue 
    } 

} 

後、私は私が私のフィルタリングが十分ではなかったと確信していますので、この

class HomeFeedJSON { 

var title: String? 
var author_img: URL? 
var author: String? 
var blog_text: String? 
var post_img: URL? 
var likesNumber: Int? 
var commentNumber:Int? 

init(items: JSON){ 
    //self.author = items["author"].stringValue 

    if let userUrl = items["author"].string { 
     self.author = userUrl 
    } 
    if let authorImgUrl = items["author_img"].URL { 
     self.author_img = authorImgUrl 
    } 
    if let titleUrl = items["title"].string { 
     self.title = titleUrl 
    } 
    if let blogTextURL = items["blog_text"].string { 
     self.blog_text = blogTextURL 
    } 

    if let post_imgAA = items["post_img"].array { 
    for itemsIMG in post_imgAA { 
    if let postUrl = itemsIMG["guid"].URL { 
     self.post_img = postUrl 
    } else { 
     let myURL = "www.thewoodjoynt.com/Content/Images/Products/NoImageAvailable.jpg" 
     let noImage: URL = URL(string: myURL)! 
     self.post_img = noImage 
    } 
    } 
    } 

    self.likesNumber = items["show_likes"].intValue 
    self.commentNumber = items["show_comment_number"].intValue 
    } 

} 

のようないくつかのフィルタリングは、まだそれがクラッシュ実行しようとしました前に宣言私モデルクラスです。私にいくつかの提案、どのようにこれらのnilをフィルタリングするか教えてくださいJSONリターン。前もって感謝します。

+0

のような問題を解決しましたか?あなたは、すべての '.xxxValue'をforce-unwrappingカウンターパートではなく、' self.likesNumber = items ["show_likes"]。intValue'と 'self.commentNumber = items [" show_comment_number "]。intValue' 'self.likesNumber = items [" show_likes "]。int'と' self.commentNumber = items ["show_comment_number"]。int'をそれぞれプラスにして、前と同じようにif-letでラップします) – HAS

+0

いいえ、この2つの** self.likesNumber **&** self.commentNumber **は問題を起こさなかった。 ** tableViewCell **で** post_img **と呼ばれていました**それは**なしです** –

答えて

0

は、それがクラッシュしないこの

class HomeFeedJSON { 

var _title: String? 
var _author_img: URL? 
var _author: String? 
var _blog_text: String? 
var _post_img: URL? 
var _likesNumber: Int? 
var _commentNumber:Int? 

init(items: JSON){ 
    self._author = items["author"].stringValue 
    self._author_img = items["author_img"].URL 
    self._title = items["title"].stringValue 
    self._blog_text = items["blog_text"].stringValue 
    let post_imgAA = items["post_img"].array 
    for itemsIMG in post_imgAA! { 
     self._post_img = itemsIMG["guid"].URL 
    } 
    self._likesNumber = items["show_likes"].intValue 
    self._commentNumber = items["show_comment_number"].intValue 
} 

var title: String { 
    if _title == nil { 
     _title = "" 
    } 
    return _title! 
} 
var author_img: URL { 
    if _author_img == nil { 
     let myURL = "http://thewoodjoynt.com/Content/Images/Products/NoImageAvailable.jpg" 
     let noImage: URL = URL(string: myURL)! 
     _author_img = noImage 
    } 
    return _author_img! 
} 

var author: String { 
    if _author == nil { 
     _author = "" 
    } 
    return _author! 
} 

var blog_text: String { 
    if _blog_text == nil { 
     _blog_text = "" 
    } 
    return _blog_text! 
} 

var post_img: URL { 
    if _post_img == nil { 
     let myURL = "http://thewoodjoynt.com/Content/Images/Products/NoImageAvailable.jpg" 
     let noImage: URL = URL(string: myURL)! 
     _post_img = noImage 
    } 
    return _post_img! 
} 

var likesNumber: Int { 
    if _likesNumber == nil { 
     _likesNumber = 0 
    } 
    return _likesNumber! 
} 

var commentNumber: Int { 
    if _commentNumber == nil { 
     _commentNumber = 0 
    } 
    return _commentNumber! 
} 

} 
+0

なぜこの '_' ?? –

+0

** _ title **&** title **は2つの異なる変数ですので、簡単です! –

+0

あなたの答えでは、あなたは 'title'を使っていませんでした。 –

関連する問題