gpt4 book ai didi

ios - 如果某些数据为 NSNull,如何正确解析 JSON 数据

转载 作者:搜寻专家 更新时间:2023-11-01 07:25:22 25 4
gpt4 key购买 nike

我目前正在通过 Twitter 的搜索 API 提取数据。

一旦我收到数据,我就会尝试解析数据并将其保存到我的 TweetDetails 类(它包含作者的姓名、他们的个人资料图片的 url、推文的文本、推文的位置、推文 ID 和用户 ID)。

在某些情况下,Tweets 没有位置(我认为如果它们被转发,则有一定的作用),并且某些字典(这里是 tweetsDict["place"])否则会保存该信息,而是返回 NSNull。

在那些情况下,我会收到此错误

Could not cast value of type 'NSNull' (0x1093a1600) to 'NSDictionary' (0x1093a0fe8).

这是我尝试解析数据并将其保存到我的 TweetDetails 类中的对象时的代码

    client.sendTwitterRequest(request) { (response, data, connectionError) -> Void in
if connectionError != nil {
print("Error: \(connectionError)")
}
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: [])

if let tweets = json["statuses"] as? [NSDictionary] {
for tweetsDict in tweets {
let text = tweetsDict["text"] as! String
let tweetID = tweetsDict["id_str"] as! String
let place = tweetsDict["place"] as! NSDictionary

// this line ^^ is where the error occurs
let city = place.valueForKey("full_name")
let user = tweetsDict["user"] as! NSDictionary
let userID = user.valueForKey("id_str")
let screenName = user.valueForKey("screen_name")!
let avatarImage = user.valueForKey("profile_image_url_https")!

let tweet = TweetDetails(authors: screenName as! String, profileImages: avatarImage as! String, tweetTexts: text, tweetLocations: city as! String , tweetIDs: tweetID , userIDs: userID as! String)
self.allTweets.append(tweet)
self.tweetTableView.reloadData()
}
}
} catch let jsonError as NSError {
print("json error: \(jsonError.localizedDescription)")
}
}

我曾尝试创建一些“if-let”语句来为这些场合提供替代方案,但没有任何效果。

当某些 JSON 数据返回为 NSNull 时,有人可以帮我创建一个自定义替代方案吗? (即使是在数据返回 NSNull 的情况下将我的“城市”变量转换为字符串“未知位置”这样简单的事情)。

在此先感谢,如果我可以添加任何其他内容以使这个问题更加清晰,请告诉我。

最佳答案

正如其他人所指出的,您可以使用可选绑定(bind) (if let),或者,在这种情况下,甚至更简单,只需使用可选链接:

let city = tweetsDict["place"]?["full_name"] as? String 

这样,city 是可选的,即如果因为没有 placefull_name 条目而找不到值,它将是

不过,您的 TweetDetails 似乎正在将 city 强制转换为 String。它绝对需要一个城市吗?最好更改此方法,以便 city 是可选的,并优雅地处理那里的 nil 值。或者,您可以将 citynil 值替换为其他字符串,例如使用 nil 合并运算符:

let city = tweetsDict["place"]?["full_name"] as? String ?? "Unknown city"

如果找到则返回城市,否则返回“Unknown city”。

关于ios - 如果某些数据为 NSNull,如何正确解析 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36728043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com