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

Posted

技术标签:

【中文标题】如果 json 数组中的某个值返回 null,如何返回下一个非 null 的 json 值?【英文标题】:If a value in a json array returns null, how to return the next non-null json value? 【发布时间】:2017-02-08 23:35:46 【问题描述】:

目前我正在尝试从 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 对象映射器Gloss,到目前为止它一直很好。以下是我设置对象的方式:

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)
      
    )
  

【问题讨论】:

您可以使用 ?? 检查该变量。例如 var strData = nil starData = strData ?? "" 【参考方案1】:
    guard let poster: String = "poster_path" <~~ json

应该是

guard let poster = ("poster_path" <~~ json) as? String

(当然,您使用的是我一无所知的库,因此该库可能会崩溃。JSONSerialization 是您的朋友。它有效。每个人都知道它的作用)。

【讨论】:

【参考方案2】:
    for data in results as! [Dictionary<String,AnyObjects>]
    var value1 = data["key"] as? String
    if value1 == nilvalue1 = ""else
    
    
    That was just a simple logic but completely work for me all the time. :)

【讨论】:

欢迎来到 Stack Overflow!请拿起tour,环顾四周,并通读help center,尤其是How do I write a good answer?。请添加一些文字来解释代码的作用以及它解决问题的原因。

以上是关于如果 json 数组中的某个值返回 null,如何返回下一个非 null 的 json 值?的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何输出数组中某个特定值

js中判断对象数组中是不是有某个属性值

返回json时,字段为null的处理方式

如何检查json数据数组是不是返回值

第六章 SQL聚合函数 JSON_ARRAYAGG

js如何查找数组中是不是存在某个值