我正在从Web服务中获取json对象,并尝试对其进行解码,但收到以下错误。
无法加载:错误域= NSCocoaErrorDomain代码= 4864“预期解码字典,但找到一个字符串/数据。”UserInfo = {NSCodingPath =(“ CodingKeys(stringValue:\” classes \“,intValue:nil)”,“ _JSONKey(stringValue:\”索引0 \“,intValue:0)”),NSDebugDescription =希望对Dictionary进行解码,但是找到了一个字符串/数据。}
{
"classes": ["{\n \"name\": \"class_update\",\n \"data\": {\n \"options\": {\n \"is_done\": true,\n \"class_address\": \"518bfa8e45dbfe7b89acb948218067fc\"\n }\n },\n \"enrollment\": 8,\n \"date\": 1588559999\n}", "{\n \"name\": \"class_update\",\n \"data\": {\n \"options\": {\n \"is_done\": false,\n \"class_address\": \"213cab4371adfca3f35a5f24ac3f4c10\"\n }\n },\n \"enrollment\": 9,\n \"date\": 1588550123\n}"]
}
代码实现如下:
// MARK: - Welcome
struct Welcome: Codable {
let classes: [Classes]
}
// MARK: - Classes
struct Classes: Codable {
let name: String
let data: DataClass
let enrollment, date: Int
}
// MARK: - DataClass
struct DataClass: Codable {
let options: Options
}
// MARK: - Options
struct Options: Codable {
let is_done: Bool
let class_address: String
}
func fetchJSONData(urlString: String, completion: @escaping(Welcome?, Error?) -> ())
{
AF.request(urlString, method:.get, parameters: nil).response { response in
debugPrint(response)
do {
let a = try JSONDecoder().decode(Welcome.self, from: response.data!)
print(a)
}
catch let error as NSError {
print("Failed to load: \(error.debugDescription)")
}
}
}
有效的JSON将是
{
"classes": [
{
"name": "class_update",
"data": {
"options": {
"is_done": true,
"class_address": "518bfa8e45dbfe7b89acb948218067fc"
}
},
"enrollment": 8,
"date": 1588559999
},
{
"name": "class_update",
"data": {
"options": {
"is_done": false,
"class_address": "213cab4371adfca3f35a5f24ac3f4c10"
}
},
"enrollment": 9,
"date": 1588550123
}
]
}
其JSON字符串将为
"{\"classes\":[{\"name\":\"class_update\",\"data\":{\"options\":{\"is_done\":true,\"class_address\":\"518bfa8e45dbfe7b89acb948218067fc\"}},\"enrollment\":8,\"date\":1588559999},{\"name\":\"class_update\",\"data\":{\"options\":{\"is_done\":false,\"class_address\":\"213cab4371adfca3f35a5f24ac3f4c10\"}},\"enrollment\":9,\"date\":1588550123}]}"
您发布的JSON字符串有误,因此出现错误