Genere una cadena JSON desde NSDictionary en iOS

Resuelto Sekhar Bhetalam asked hace 54 años • 14 respuestas

Tengo un dictionaryNecesito generar un JSON stringusando dictionary. ¿Es posible convertirlo? ¿Pueden ayudarme con esto?

Sekhar Bhetalam avatar Jan 01 '70 08:01 Sekhar Bhetalam
Aceptado

Apple agregó un analizador y serializador JSON en iOS 5.0 y Mac OS X 10.7. Consulte NSJSONSerialización .

Para generar una cadena JSON desde NSDictionary o NSArray, ya no necesita importar ningún marco de terceros.

Aquí se explica cómo hacerlo:

NSError *error; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionaryOrArrayToOutput 
                                                   options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
                                                     error:&error];

if (! jsonData) {
    NSLog(@"Got an error: %@", error);
} else {
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
Guillaume avatar Jan 26 '2012 15:01 Guillaume

Aquí hay categorías para NSArray y NSDictionary para que esto sea muy fácil. Agregué una opción para impresión bonita (nuevas líneas y tabulaciones para facilitar la lectura).

@interface NSDictionary (BVJSONString)
-(NSString*) bv_jsonStringWithPrettyPrint:(BOOL) prettyPrint;
@end

.

@implementation NSDictionary (BVJSONString)

  -(NSString*) bv_jsonStringWithPrettyPrint:(BOOL) prettyPrint {
     NSError *error;
     NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self
                                                   options:(NSJSONWritingOptions)    (prettyPrint ? NSJSONWritingPrettyPrinted : 0)
                                                     error:&error];

     if (! jsonData) {
        NSLog(@"%s: error: %@", __func__, error.localizedDescription);
        return @"{}";
     } else {
        return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
     } 
 }
@end

.

@interface NSArray (BVJSONString)
- (NSString *)bv_jsonStringWithPrettyPrint:(BOOL)prettyPrint;
@end

.

@implementation NSArray (BVJSONString)
-(NSString*) bv_jsonStringWithPrettyPrint:(BOOL) prettyPrint {
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self
                                                       options:(NSJSONWritingOptions) (prettyPrint ? NSJSONWritingPrettyPrinted : 0)
                                                         error:&error];

    if (! jsonData) {
        NSLog(@"%s: error: %@", __func__, error.localizedDescription);
        return @"[]";
    } else {
        return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    }
}
@end
Ben Clayton avatar Nov 28 '2013 09:11 Ben Clayton

Para convertir un NSDictionary en un NSString:

NSError * err;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:myDictionary options:0 error:&err]; 
NSString * myString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
jobima avatar Mar 21 '2014 10:03 jobima

NOTA: Esta respuesta se dio antes del lanzamiento de iOS 5.

Obtenga el json-framework y haga esto:

#import "SBJsonWriter.h"

...

SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init];

NSString *jsonString = [jsonWriter stringWithObject:myDictionary];  

[jsonWriter release];

myDictionaryserá tu diccionario.

Nick Weaver avatar Jun 16 '2011 08:06 Nick Weaver

También puede hacer esto sobre la marcha ingresando lo siguiente en el depurador

po [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:yourDictionary options:1 error:nil] encoding:4];
Andy avatar Nov 29 '2013 13:11 Andy