我有以下虚拟的JSON数据,用于上学的公共汽车。
{
"toSchool": {
"weekday": [{
"hour": 7,
"min": 10,
"type": null,
"rotary": false
}],
"sat": [{
"hour": 8,
"min": 15,
"type": null,
"rotary": true
}]
}
}
我想使用基于用户输入的变量来访问“工作日”和“星期六”键。我如何才能做到这一点?
使用SwiftyJSON,这非常简单,如下所示
let json = try JSON(data: data)
let userDirection = "shosfc"
let userWeek = "weekday"
let busList = json[userDirection][0][userWeek]
但是,我想知道如何在本地删除依赖项。
看来CodingKey和enum可能是处理此问题的方法。当示例像this一样简单时,我可以理解。但是,我只是无法针对我的特殊用途来解决它,因为它涉及自定义对象而不仅仅是String。
我该怎么做?请帮忙。
答案 0 :(得分:1)
这是基于您的earlier question
func bus(isWeekday: Bool = true) -> [Bus] {
return isWeekday ? shosfc.weekDay : shosfc.sat
}
答案 1 :(得分:1)
我认为下面的代码会起作用:
struct SampleResponse: Codable {
let toSchool: ToSchool
}
struct ToSchool: Codable {
let weekday, sat: [Sat]
}
struct Sat: Codable {
let hour, min: Int
let type: String?
let rotary: Bool
}
要解码这种类型的响应,必须使用SampleResponse类型对此JSON进行解码。
let sampleResponse = try? newJSONDecoder().decode(SampleResponse.self, from: jsonData)
在那之后,您可以按照要求访问变量。
答案 2 :(得分:1)
您可以快速将JSON字符串转换为Dictionary并以与以前相同的方式访问它:
func parseToDictionary(_ jsonStr: String) -> [String: Any]? {
if let data = jsonStr.data(using: .utf8) {
do {
return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
} catch {
print(error.localizedDescription)
}
}
return nil
}
let jsonStr = "{Your JSON String}"
let json = parseToDictionary(jsonStr)
let userDirection = "shosfc"
let userWeek = "weekday"
let busList = json[userDirection][0][userWeek]