Как вставить следующий простой JsonObject в swift 4? Мне нужно значение кода и сообщения - PullRequest
0 голосов
/ 04 сентября 2018

// Это ответ json, где мне нужно разобрать.

// Мне нужно следующее кодовое значение для условия.

 {
   Code = 0;
   Message = "Login Fail";
 }

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Ну, вы можете использовать ObjectMapper swift для простой конвертации объектных моделей в и из JSON:

Чтобы разбить его:

  1. Добавить библиотеку ObjectMapper в ваш проект, используя CocoaPods:

        pod 'ObjectMapper', '~> 3.3'
    
  2. Определите новый класс или структуру (модель), которая реализует протокол Mappable, отметив, что вы должны соответствовать протоколу Mappable, реализовав его два метода:

    class Response: Mappable {
    
        var code: Int?
        var message: String?
    
        required init?(map: Map) { }
    
         // Mappable
        func mapping(map: Map) {
           code            <- map["code"]
           message         <- map["message"]
        }
      }
    
  3. Разобрать ответ API и преобразовать ответ словаря в объект модели ответа:

    if let data = resultDictionary["response"] as? Dictionary<String, AnyObject> {
    
                   let  response = Mapper<Response>().map(JSONObject: data)
    
                    print("code = \(response.code)")
                    print("message = \(response.message.)")
       }
     }
    

Модель ответа - сопоставляемый объект, содержащий код и сообщение.

0 голосов
/ 04 сентября 2018

Вперед, исходная размещенная структура данных не соответствует и не является возвращаемым объектом JSON

{
  Code = 0;
  Message = "Login Fail";
}

Преобразовано в JSON

{
 "Code" : 0,
 "Message" : "Login Fail"
}

с этим Swift 4 имеет очень хороший протокол, называемый Decodable и JSONDecoder. Это новые для Foundation.

Шаг 1. Создайте структуру или класс, соответствующий Decodable

struct ErrorResponse: Decodable {
   var code: String?
   var message: String?
   enum CodingKeys : String, CodingKey {
       case code = "Code"
       case message = "Message"
   }
}

Альтернативное объявление, не использующее необязательные значения

struct ErrorResponse: Decodable {
   var code: String
   var message: String
   enum CodingKeys : String, CodingKey {
       case code = "Code"
       case message = "Message"
   }
}

Apple также приводит множество примеров правильного использования Decodable и CodingKey здесь

Уведомление : как использовать CodingKeys здесь для обозначения свойств, находящихся в нижнем регистре, но получаемых с сервера, в верхнем регистре. Вы можете использовать CodingKey для кодирования и декодирования свойств по вашему собственному соглашению об именах.

Шаг 2. Использование JSONDecoder

guard let responseError = try? JSONDecoder().decode(ErrorResponse.self, from: data) else {
  print("Error: Could not parse JSON")
  return
}
print("code: \(responseError.code)")
print("message: \(responseError.message)")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...