我正在尝试验证students == null
或可用的值,如果可用值,我需要将get grade
和store grade
放入表数据数组中,并且需要将subject null
存储在表中JSON下面的相同数组For example: [10, null, 11]
。如何在JSON响应中的单个数组中附加这样的内容。
{
"students":[
{
"id":0,
"subject":[
{
"grade":10
}
]
},
{
"id":1,
"subject":null
},
{
"id":2,
"subject":[
{
"grade":11
}
]
}
]
}
Expected output: [10,null,11,......] //This array I am going to use Tableview cell
我要根据单元格中的null
和not null
数组值进行验证。我可以使用var array = [String?]
来接受null值,但是如何将两个不同的字段结果附加到同一数组中?
答案 0 :(得分:1)
答案 1 :(得分:0)
这看起来很简单。最好的解决方案是可腐烂的。从网络或其他任何方式加载的有效负载将解析为结构。现在,您可以轻松进行任何操作。
设置:打开一个新项目。使用您提供的json有效负载添加“ payload.json”文件。 将以下内容添加到您的项目中。
import UIKit
struct StudentData: Decodable {
var students: [Student]
}
struct Student: Decodable {
var id: Int
var subject: [Subject]?
}
struct Subject: Decodable {
var grade: Int
}
class ViewController: UIViewController {
var data: Data? {
guard let path = Bundle(for: type(of: self)).path(forResource: "payload", ofType: "json") else { return nil }
return try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
}
override func viewDidLoad() {
super.viewDidLoad()
if let data = data {
do {
let studentData = try JSONDecoder().decode(StudentData.self, from: data)
print(studentData)
// manipulate the structure in any way you want
let subjects: [Subject?] = studentData.students.map { $0.subject?.first }
print(subjects)
let nonNilValues = subjects.compactMap { $0 }
print(subjects)
// ... etc
} catch let error {
print(error.localizedDescription)
}
}
}
}
很抱歉没有在操场上编码。太容易了。
答案 2 :(得分:0)
尝试一下
let students = [["id": 0,"subject": [["grade": 10]]],
["id": 0,"subject": nil],
["id": 0,"subject": [["grade": 10]]]] as! [Dictionary<String,Any>]
let array = students.map({(($0["subject"] as? [Any])?.first as? Dictionary<String,Int>)?["grade"]})
print(array)