简体   繁体   English

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

[英]how to handle JSON when found nil in it

Recently I am dealing with JSON and everyday I encounter new problem, although I like it because I am learning everyday. 最近,我正在处理JSON ,每天我都会遇到新问题,尽管我喜欢它是因为我每天都在学习。 StackOverflow mates are helping me tremendously, thank you for that. StackOverflow的同伴正在极大地帮助我,谢谢您。

My app was running fine , until I found nil in some JSON return. 我的应用运行正常,直到在某些JSON返回中找到nil为止。 Here is my JSON return 这是我的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"
     }
   ]
 }

Here in the 2nd chunk of JSON return you can see there is no guid inside ** post_img** . JSON返回的第二个块中,您可以看到** post_img **内部没有任何GUID So whenever my array iterate through this, it crashes. 因此,只要我的数组对此进行迭代 ,它就会崩溃。 Here is my model class I declared earlier 这是我之前声明的模型类

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
   }

}

Later I tried to do some filtering like this 后来我试图做这样的过滤

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
  }

}

Still it crashes because I am sure my filtering was not good enough. 它仍然崩溃,因为我确信我的过滤效果不够好。 Please give me some suggestion , how to filter these nil JSON return. 请给我一些建议,如何过滤这些nil JSON返回。 Thank You in advance. 先感谢您。

Solved the issue like this 解决了这样的问题

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!
}

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM