如何在其中找到nil时如何处理JSON

时间:2016-11-17 06:36:32

标签: json swift3 swifty-json

最近我正在处理 JSON ,每天我遇到新问题,虽然我喜欢它,因为我每天都在学习。 StackOverflow伙伴正在帮助我,谢谢你。

我的应用运行正常,直到我在某些 JSON 返回时发现 nil 。这是我的 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 的第二大块中,您可以看到** post_img **中没有 guid 。因此,每当我的数组迭代时,它都会崩溃。这是我之前声明的模型类

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
  }

}

仍然崩溃,因为我确信我的过滤效果还不够好。请给我一些建议,如何过滤这些 JSON 返回。先感谢您。

1 个答案:

答案 0 :(得分: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!
}

}