解码字典 但找到了一个字符串/数据

问题描述 投票:0回答:1

我正在从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)")
         }
      }
  }
swift
1个回答
0
投票

有效的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字符串有误,因此出现错误

© www.soinside.com 2019 - 2024. All rights reserved.