如何识别 JSON 响应中的特定值
Posted
技术标签:
【中文标题】如何识别 JSON 响应中的特定值【英文标题】:How to identify specific values in JSON response 【发布时间】:2016-05-31 08:33:03 【问题描述】:我想获得特定的 JSON 响应。例如,仅获取 id 为 25 和 26 的数组中的结果(即名称和分数)。swift 中是否有 WHERE
子句?如果有帮助,我正在使用 Alamofire 和 SwiftyJSON。
现在我的代码只是提取所有值,但我只想得到 id 为 25 和 26 的结果。这可能吗?
我的代码:
Alamofire.request(.GET, endPoint).validate()
.responseJSON response in
switch response.result
case .Success:
if let value = response.result.value
let json = JSON(value)
for (_,subJson):(String, JSON) in json
if let date = subJson["start_date"].string
self.date = date
if let building = subJson["building_name"].string
self.building = building
if let jobId = subJson["schedule_job_id"].int
self.jobIdArray.append(jobId)
if let tasks = subJson["tasks"].array
for building in tasks
Tasks.sharedInstance.datas = tasks
if let ratings = building["safety_ratings"].array
for submission in ratings
if let score = submission["score"].string
self.scoreArray.append(score)
if let ratingId = submission["safety_rating_id"].int
self.ratingArray.append(ratingId)
if let submissionId = submission["submission_id"].int
self.subIdArray.append(submissionId)
onCompletion()
case .Failure(let error):
print("Request failed with error: \(error)")
onError?(error)
更新
func getTask(onCompletion: () -> (), onError: ((NSError) -> ())? = nil)
guard let endPoint = Data.sharedInstance.weeklyEndpoint else print("Empty endpoint"); return
Alamofire.request(.GET, endPoint, encoding: .JSON)
.validate()
.responseJSON response in
switch response.result
case .Success:
if let value = response.result.value
let json = JSON(value)
for (_,subJson):(String, JSON) in json
if let date = subJson["start_date"].string
self.date = date
if let building = subJson["building_name"].string
self.building = building
if let jobId = subJson["schedule_job_id"].int
self.ratingArray.append(jobId)
let IDsYouWant: [Int] = [18, 27]
let tasksYouWant = subJson["tasks"].arrayValue.filter IDsYouWant.contains($0["id"].intValue)
for task in tasksYouWant
if let ratings = task["safety_ratings"].array
for submission in ratings
if let score = submission["score"].string
let scoreResult = Int(score)
self.ratingArray.append(scoreResult!)
if let ratingId = submission["safety_rating_id"].int
self.ratingArray.append(ratingId)
if let submissionId = submission["submission_id"].int
self.ratingArray.append(submissionId)
if let tasks = subJson["tasks"].array
Tasks.sharedInstance.datas = tasks
print(self.ratingArray)
onCompletion()
case .Failure(let error):
print("Request failed with error: \(error)")
onError?(error)
当我打印 taskYouWant
时,我得到一个空数组..
这是来自我的 GET https://codeshare.io/UqJMV 的 JSON 响应
我正在寻找的是score
、safety_rating_id
,其中我的submission_id
是x 值。比如拉取submission_id
为27的数组。
【问题讨论】:
不使用 JSON,不,但是一旦你将它解析为 Objective-C 集合类,你就有一些选择...... 能否请您包含您的 JSON 的实际 sn-p?您粘贴的那个无效。谢谢。 嗨 @EricD 我已经用 JSON 响应更新了我的帖子 【参考方案1】:如何将 subJson["tasks"] 转换为数组然后对其进行过滤:
let IDsYouWant: [Int] = [25, 26]
let tasksYouWant = subJson["tasks"].arrayValue.filter IDsYouWant.contains($0["id"].intValue)
for task in tasksYouWant
//process task 25 and 26
希望有帮助!
【讨论】:
嗨@66o 我得到一个空数组..你能帮帮我吗? (更新代码) 您要解析哪个 JSON?您在代码共享中粘贴的那个看起来不同,您需要将键更新为适当的值以使其工作 对我试图在代码共享中解析 JSON 的困惑表示歉意,我也更新了我的值。我只对提交 id 为 27 的数组感兴趣(我的 JSON 给了我几个数组,我更新了我的代码共享以反映这一点) 好的,再次,在您的代码共享中,您有不一致的对象。前几个有“submission_id”作为int:"submission_id" : 26
你标记的你感兴趣的是字符串"submission_id" : "27"
如果id是一个字符串那么你需要把字符串放在IDsYouWant
和过滤器关闭应该读@ 987654325@
我仍然收到nil
我认为问题是脚本无法读取submission_id
值以上是关于如何识别 JSON 响应中的特定值的主要内容,如果未能解决你的问题,请参考以下文章