objective-c ios json null nsjsonserialization

objective c - ¿Cómo incluir un valor nulo en el JSON a través de NSJSONSerialization?



objective-c ios (3)

Creo que entiendo cómo usar la serialización NSJSONS sobre todo. La llamada que estoy haciendo es:

[NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error]

donde parámetros es un NSDictionary que incluye claves y valores para usar en la solicitud JSON. Todo está bien y todo, hasta que tenga que usar nulo como valor en lugar de una cadena vacía. No puedo encontrar una manera de establecer el valor como nulo en absoluto. El ejemplo de json que necesito crear es:

{"target" {"firstname":<firstname>, "lastname":<lastname>}, "error":null }

La forma en que se configura el servidor es que está esperando un error como una cadena o un nulo si no hay ningún error.

¿Algunas ideas? ¿Me estoy perdiendo una llamada a la API o algo así?

¡Gracias!


Si está utilizando Swifty JSON, acabo de crear un PR que debería manejar nil. Aún no se ha fusionado y es posible que necesite algunas mejoras. La part que describe cómo hacerlo debería ser un buen comienzo para escribir su propia implementación si es necesario. La lógica no es tan complicada, pero puede haber casos difíciles en el borde / cosas en las que pensar.

Sé que no es una respuesta directa a la pregunta, ya que está reemplazando la NSJSONSerialization , pero espero que pueda ayudar a algunas personas frustradas por cómo Swift maneja nil / json.


Solo intente algo como esto:

NSDictionary *jsonObj = [NSDictionary dictionaryWithObjectsAndKeys:@"My Name", @"name", @"Developer", @"occupation", NULL, @"My NULL field", nil];

y usa este objeto como parámetro donde lo quieras.


Tienes que usar NSNull . Por ejemplo

Rápido

let dict = ["firstKeyHasValue": 2342, "secondKeyHasNoValue": NSNull()]

C objetivo

NSDictionary *dict = @{ @"error": [NSNull null] };

De la documentación oficial de NSDictionary :

Ni una clave ni un valor pueden ser nulos; Si necesita representar un valor nulo en un diccionario, debe usar NSNull.