JSON错误:数据无法’;因为它是’;格式正确

JSON错误:数据无法’;因为它是’;格式正确,json,swift,Json,Swift,因此,我试图调用后端api来获取horse类型的对象,我获取数据中的对象,但当我尝试解码它时,它不起作用。我怎样才能解决这个问题?您可以看到我的消息模型和我的马模型。我试图找出它们和json之间的区别,但我找不到 消息模型 // // MessageType.swift // HorseStable // // Created by Student on 30/12/2019. // Copyright © 2019 smartmobile. All rights reserved.

因此,我试图调用后端api来获取horse类型的对象,我获取数据中的对象,但当我尝试解码它时,它不起作用。我怎样才能解决这个问题?您可以看到我的消息模型和我的马模型。我试图找出它们和json之间的区别,但我找不到

消息模型

 //
//  MessageType.swift
//  HorseStable
//
//  Created by Student on 30/12/2019.
//  Copyright © 2019 smartmobile. All rights reserved.
//

import Foundation

enum MessageType : Int,Decodable {
         case CREATE_HORSE
          case GET_HORSE
          case UPDATE_HORSE
          case DELETE_HORSE
          case GET_HORSES_ASSIGNED_TO_USER
          case REMOVE_HORSE_FROM_USER
          case ADD_HORSE_TO_USER
      /* USERS */
      case CREATE_USER
      case GET_USER
      case UPDATE_USER
      case DELETE_USER

      /* FACILITIES */
      case CREATE_FACILITY
      case GET_FACILITY
      case UPDATE_FACILITY
      case DELETE_FACILITY

      /* STALLS */
      case CREATE_STALL
      case GET_STALL
      case UPDATE_STALL
      case DELETE_STALL

      /* POSTS */
      case CREATE_POST
      case GET_POST
          case UPDATE_POST
          case DELETE_POST

          case ADD_RESERVATION
          case REMOVE_RESERVATION

          case AUTHENTICATE
}

public class Message<T: Decodable> : Decodable {

    var type: MessageType?
    var model : T?
    init(type:MessageType,model:T) {
        self.type = type
        self.model = model
    }
以下是我的JSON响应:

{"type":"GET_HORSE","model":{"id":1,"name":"Horse2","race":"Race2","lifeNumber":"lifenumber2","chipNumber":"chipnumber2","birthDate":1579182813067,"gender":"MALE","medicalReports":[],"owners":[]}}
这是密码

func getJSON (completion: @escaping (Message<Horse>)->()) {
        let url = "http://localhost:8083/horse/1"
    if let url = URL(string: url)
    {
        let task = session.dataTask(with: url) { data, response, error in

                  if error != nil || data == nil {
                      print("Client error!")
                      return
                  }
            let str = String(decoding: data!, as: UTF8.self)
            print(str)
                  do {
                   let decoder = JSONDecoder()
                   print("nothing")

                    if let json = try? decoder.decode(Message<Horse>.self, from: data!) {
                       print(json)
                       print("something")
                   }

                  } catch {
                      print("JSON error: \(error.localizedDescription)")
                  }
              }

              task.resume()
        print("finished")
    }

您的MessageType是一个Int,但在JSON中它似乎是一个字符串。你的性别类型可能也有类似的问题(这里没有包括)。您的生日字段是日期,但在JSON中是Int


仔细检查您的模型,确保它确实与您的JSON匹配。打印
错误
(而不是
错误.localizedDescription
)应该可以准确地告诉您它在哪里遇到问题。我建议在操场上尝试使用响应JSON和解析器(去掉网络代码)。

您的消息类型是一个Int,但在JSON中它似乎是一个字符串。你的性别类型可能也有类似的问题(这里没有包括)。您的生日字段是日期,但在JSON中是Int


仔细检查您的模型,确保它确实与您的JSON匹配。打印
错误
(而不是
错误.localizedDescription
)应该可以准确地告诉您它在哪里遇到问题。我建议在操场上只使用响应JSON和解析器进行实验(去掉网络代码)。

您应该删除if let JSON=try。。。用它来代替只是尝试。。。由于您处于do catch块中,您将至少收到一条错误消息,您的错误来自何处,错误消息是怎么说的?为了帮助您,这一点很重要。您已经显示了除实际错误之外的所有内容:请也添加它=)我刚刚将错误添加到问题中,我投票将此问题作为离题题结束,因为已经使用其他帐户询问了此问题,您应该删除if let json=try。。。用它来代替只是尝试。。。由于您处于do catch块中,您将至少收到一条错误消息,您的错误来自何处,错误消息是怎么说的?为了帮助您,这一点很重要。您已经显示了除实际错误之外的所有内容:也请添加它=)我刚刚将错误添加到问题中我投票将此问题作为离题题结束,因为已使用其他帐户进行了提问,
func getJSON (completion: @escaping (Message<Horse>)->()) {
        let url = "http://localhost:8083/horse/1"
    if let url = URL(string: url)
    {
        let task = session.dataTask(with: url) { data, response, error in

                  if error != nil || data == nil {
                      print("Client error!")
                      return
                  }
            let str = String(decoding: data!, as: UTF8.self)
            print(str)
                  do {
                   let decoder = JSONDecoder()
                   print("nothing")

                    if let json = try? decoder.decode(Message<Horse>.self, from: data!) {
                       print(json)
                       print("something")
                   }

                  } catch {
                      print("JSON error: \(error.localizedDescription)")
                  }
              }

              task.resume()
        print("finished")
    }
JSON error: The data couldn’t be read because it isn’t in the correct format