Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如果json数组中的值返回null,如何返回下一个非null json值?_Ios_Arrays_Json_Swift - Fatal编程技术网

Ios 如果json数组中的值返回null,如何返回下一个非null json值?

Ios 如果json数组中的值返回null,如何返回下一个非null json值?,ios,arrays,json,swift,Ios,Arrays,Json,Swift,目前,我试图从JSON数据返回值,但遇到了一个问题,其中一个值返回null,从而导致我的应用程序崩溃 这就是json的样子: "results": [ { "genre_ids": [ 99 ], "id": 440108, "poster_path": null, //The value that's causing incredible headaches! }, { "genre_id

目前,我试图从JSON数据返回值,但遇到了一个问题,其中一个值返回null,从而导致我的应用程序崩溃

这就是json的样子:

  "results": [
    {
      "genre_ids": [
        99
      ],
      "id": 440108,
      "poster_path": null, //The value that's causing incredible headaches!
    },
    {

      "genre_ids": [
        99,
        10402
      ],
      "id": 391698,
      "poster_path": "/uv7syi4vRyjvWoB8qExbqnbuCu5.jpg",//The value trying to get!
    },

]
我正在使用json对象映射器,这在这一点上很好。以下是我如何设置对象的:

public struct ResultsGenrePosters: Decodable {

  public let results :  [GenrePosters]?

  public init?(json: JSON) {
    results = "results" <~~ json
  }
}

public struct GenrePosters: Decodable, Equatable{

  public let poster : String

  public init? (json: JSON) {

    guard let poster: String = "poster_path" <~~ json
      else {return nil}
    self.poster = poster
  }
  public static func ==(lhs: GenrePosters, rhs: GenrePosters) -> Bool {
    return lhs.poster == rhs.poster
  }


  static func updateGenrePoster(genreID: NSNumber, urlExtension: String, completionHandler:@escaping (_ details: [String]) -> Void){

    let nm = NetworkManager.sharedManager

    nm.getJSONData(type:"genre/\(genreID)", urlExtension: urlExtension, completion: {
      data in

      if let jsonDictionary = nm.parseJSONData(data)
      {
        guard let genrePosters = ResultsGenrePosters(json: jsonDictionary)

          else {
            print("Error initializing object")
            return
        }

        guard let posters = genrePosters.results

          else {
            print("No poster exists for genre: \(genreID)")// This keeps on triggering when the null object is hit, this is where it would be good to move to the next array to get that value
            return
        }

        let postersArray = posters.map {$0.poster}// converts custom object "GenrePosters" to String(poster value)
        completionHandler(postersArray)
      }
    })
  }
}
公共结构resultsgenereposter:可解码{
公开出租结果:[GenrePosters]?
公共init?(json:json){
结果=“结果”无效){
设nm=NetworkManager.sharedManager
nm.getJSONData(类型:“genre/\(genreID)”,urlExtension:urlExtension,完成:{
数据输入
如果让jsonDictionary=nm.parseJSONData(数据)
{
guard let genrePosters=ResultsGenrePosters(json:jsonDictionary)
否则{
打印(“初始化对象时出错”)
返回
}
guard let海报=genrePosters.results
否则{
print(“流派:\(genreID)不存在海报)”//这会在命中空对象时持续触发,在这里最好移动到下一个数组以获取该值
返回
}
让PosterArray=posters.map{$0.poster}//将自定义对象“genreposter”转换为字符串(poster值)
completionHandler(postersArray)
}
})
}
}
guard let poster:String=“poster\u path”
用于结果中的数据![字典]{
var value1=数据[“键”]作为字符串
如果value1==nil{value1=”“}则{}
}
}
这只是一个简单的逻辑,但对我来说一直都很有效

您可以使用???检查该变量??。Ex var strData=nil starData=strData??“”欢迎来到Stack Overflow!请拿着这本书,四处看看,特别是通读一下。请添加一些文本,解释代码的作用以及解决问题的原因。
    guard let poster: String = "poster_path" <~~ json
guard let poster = ("poster_path" <~~ json) as? String
    for data in results as! [Dictionary<String,AnyObjects>]{
    var value1 = data["key"] as? String
    if value1 == nil{value1 = ""}else{}
    }
    }
    That was just a simple logic but completely work for me all the time. :)