Ios 如果json数组中的值返回null,如何返回下一个非null json值?
目前,我试图从JSON数据返回值,但遇到了一个问题,其中一个值返回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
"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. :)