web-dev-qa-db-fra.com

créer une chaîne json à partir de NSArray

Dans mon application iPhone, j'ai une liste d'objets personnalisés. J'ai besoin de créer une chaîne JSON à partir d'eux. Comment puis-je implémenter cela avec SBJSON ou iPhone sdk?

 NSArray* eventsForUpload = [app.dataService.coreDataHelper fetchInstancesOf:@"Event" where:@"isForUpload" is:[NSNumber numberWithBool:YES]];
    SBJsonWriter *writer = [[SBJsonWriter alloc] init];  
    NSString *actionLinksStr = [writer stringWithObject:eventsForUpload];

et j'obtiens un résultat vide.

23
revolutionkpi

Ce processus est très simple maintenant, vous ne devez pas utiliser de bibliothèques externes, Faites-le de cette façon, (iOS 5 et supérieur)

NSArray *myArray;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myArray options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
52

J'aime mes catégories alors je fais ce genre de chose comme suit

@implementation NSArray (Extensions)

- (NSString*)json
{
    NSString* json = nil;

    NSError* error = nil;
    NSData *data = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:&error];
    json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    return (error ? nil : json);
}

@end
10
Damo

Bien que la réponse la plus votée soit valable pour un tableau de dictionnaires ou d'autres objets sérialisables, elle ne l'est pas pour les objets personnalisés.

Voici la chose, vous aurez besoin de parcourir votre tableau, d’obtenir la représentation dans le dictionnaire de chaque objet et de l’ajouter à un nouveau tableau à sérialiser.

 NSString *offersJSONString = @"";
 if(offers)
 {
     NSMutableArray *offersJSONArray = [NSMutableArray array];
     for (Offer *offer in offers)
     {
         [offersJSONArray addObject:[offer dictionaryRepresentation]];
     }

     NSData *offersJSONData = [NSJSONSerialization dataWithJSONObject:offersJSONArray options:NSJSONWritingPrettyPrinted error:&error];

     offersJSONString = [[NSString alloc] initWithData:offersJSONData encoding:NSUTF8StringEncoding] ;
 }

En ce qui concerne la méthode dictionaryRepresentation dans la classe Offer:

- (NSDictionary *)dictionaryRepresentation
{
    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
    [mutableDict setValue:self.title forKey:@"title"];

    return [NSDictionary dictionaryWithDictionary:mutableDict];
}
4
Rimon

Essayez comme ça Swift 2.3

let consArray = [1,2,3,4,5,6]
var jsonString : String = ""
do
{
    if let postData : NSData = try NSJSONSerialization.dataWithJSONObject(consArray, options: NSJSONWritingOptions.PrettyPrinted)
    {
        jsonString = NSString(data: postData, encoding: NSUTF8StringEncoding)! as String
    }
}
catch
{
    print(error)
}
2

Essayez comme ça,

- (NSString *)JSONRepresentation {
    SBJsonWriter *jsonWriter = [SBJsonWriter new];    
    NSString *json = [jsonWriter stringWithObject:self];
    if (!json)

    [jsonWriter release];
    return json;
}

alors appelez ça comme,

NSString *jsonString = [array JSONRepresentation];

J'espère que ça vous aidera ...

0
Venk

Je suis un peu en retard pour cette partie, mais vous pouvez sérialiser un tableau d'objets personnalisés en implémentant la méthode -proxyForJson dans vos objets personnalisés. (Ou dans une catégorie sur vos objets personnalisés.)

Pour un exemple .

0
Stig Brautaset