如果 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 值?的主要内容,如果未能解决你的问题,请参考以下文章