swiftyjson objective example alamofire swift3

objective - alamofire swift 4 example



JSONSerialization Tipo no vĂ¡lido en escritura JSON(_SwiftValue) (5)

Debes convertir NSObject a NSDictory al principio

Intenta esto para convertir a NSDictory.

#import <objc/runtime.h> //Add this utility method in your class. + (NSDictionary *)dictionaryWithPropertiesOfObject:(id)obj { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; unsigned count; objc_property_t *properties = class_copyPropertyList([obj class], &count); for (int i = 0; i < count; i++) { NSString *key = [NSString stringWithUTF8String:property_getName(properties[i])]; [dict setObject:[obj valueForKey:key] ? [obj valueForKey:key] : @"" forKey:key]; } free(properties); return [NSDictionary dictionaryWithDictionary:dict]; }

Entonces llama a esto:

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:0 error:&err]; NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

¿Por qué el siguiente código me da el error:

Tipo no válido en escritura JSON (_SwiftValue).

El error se lanza en esta línea:

urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters)

Código completo:

let parameters:Parameters = ["resource":[ [ "appUserCode":uuidString, "productNFCode": self.nfCode!, "status":code, "applicationKey":appDelegate.api_key ] ] ] do { urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters) } catch { // No-op }


En caso de que alguien siga teniendo problemas y esté usando Enums, otra causa puede ser si está pasando un valor de Enum y no su valor en bruto.

Ejemplo:

enum Status: String { case open case closed }

en lugar de pasar la enumeración :

params = ["status": Status.open]

pasar

params = ["status": Status.open.rawValue]


Si está usando SwiftyJSON para acceder a un objeto JSON, es importante usar la propiedad dictionaryObject del JSON (en lugar de usar dictionaryValue , dictionary o nada), ya que de lo contrario obtendrá este error (o una variación de él). Por ejemplo:

guard let jsonDict = json.dictionaryObject else { return } let jsonData = try JSONSerialization.data(withJSONObject: jsonDict, options: [])


Si su problema aún no se resuelve con la respuesta dada aquí. Creo que uno de sus objetos dentro de los parameters podría no ser una instancia de NSString , NSNumber , NSArray , NSDictionary o NSNull . Como se indica en la documentación de la clase JSONSerialization :

Un objeto que se puede convertir a JSON debe tener las siguientes propiedades:

  1. El objeto de nivel superior es un NSArray o NSDictionary. Todos los objetos son instancias de NSString, NSNumber, NSArray, NSDictionary o NSNull.

  2. Todas las claves del diccionario son instancias de NSString. Los números no son NaN o infinito.

  3. Otras reglas pueden aplicar. Llamar a isValidJSONObject (_ :) o intentar una conversión son las formas definitivas de saber si un objeto determinado se puede convertir a datos JSON.

Por lo tanto, compruebe si alguno de los objetos en su objeto de parameters no cumple con las restricciones anteriores.


Tuve este problema y fue porque una de mis cadenas era opcional. Estaba intentando serializar un valor como: "Opcional (/" valor de cadena / ")"

En lugar de "valor de cadena"