354 Stimmen

JSON-String aus NSDictionary in iOS generieren

Ich habe eine dictionary Ich muss eine JSON string durch die Verwendung von dictionary . Ist es möglich, sie zu konvertieren? Könnt ihr mir bitte dabei helfen?

772voto

Guillaume Punkte 21515

Apple hat in iOS 5.0 und Mac OS X 10.7 einen JSON-Parser und Serialisierer hinzugefügt. Siehe NSJSONSerialisierung .

Um einen JSON-String aus einem NSDictionary oder NSArray zu generieren, müssen Sie kein Framework eines Drittanbieters mehr importieren.

So wird es gemacht:

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];
}

241voto

Ben Clayton Punkte 78173

Hier sind Kategorien für NSArray und NSDictionary, um dies zu vereinfachen. Ich habe eine Option für Pretty-Print hinzugefügt (Zeilenumbrüche und Tabulatoren, um die Lesbarkeit zu verbessern).

@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

66voto

jobima Punkte 5652

Um ein NSDictionary in einen NSString zu konvertieren:

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

34voto

Nick Weaver Punkte 47028

HINWEIS: Diese Antwort wurde gegeben, bevor iOS 5 veröffentlicht wurde.

Holen Sie sich die json-Rahmenwerk und dies tun:

#import "SBJsonWriter.h"

...

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

NSString *jsonString = [jsonWriter stringWithObject:myDictionary];  

[jsonWriter release];

myDictionary wird Ihr Wörterbuch sein.

27voto

Andy Punkte 14260

Sie können dies auch on-the-fly tun, indem Sie folgendes in den Debugger eingeben

po [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:yourDictionary options:1 error:nil] encoding:4];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X