webentwicklung-frage-antwort-db.com.de

Konvertieren von NSString nach NSDictionary / JSON

Ich habe die folgenden Daten als NSString gespeichert:

 {
    Key = ID;
    Value =         {
        Content = 268;
        Type = Text;
    };
},
    {
    Key = ContractTemplateId;
    Value =         {
        Content = 65;
        Type = Text;
    };
},

Ich möchte diese Daten in ein NSDictionary konvertieren, das die Schlüsselwertpaare enthält.

Ich versuche zuerst, die NSString in ein JSON -Objekt wie folgt umzuwandeln:

 NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

Wenn ich jedoch versuche:

NSString * test = [json objectForKey:@"ID"];
NSLog(@"TEST IS %@", test);

Ich erhalte den Wert als NULL.

Kann jemand vorschlagen, was das Problem ist?

79

Ich glaube, Sie interpretieren das JSON-Format für Schlüsselwerte falsch. Sie sollten Ihre Zeichenfolge als speichern

NSString *jsonString = @"{\"ID\":{\"Content\":268,\"type\":\"text\"},\"ContractTemplateID\":{\"Content\":65,\"type\":\"text\"}}";
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

Nun, wenn Sie die NSLog-Anweisung befolgen

NSLog(@"%@",[json objectForKey:@"ID"]);

Ergebnis wäre ein anderes NSDictionary.

{
    Content = 268;
    type = text;
}

Ich hoffe, das hilft, ein klares Verständnis zu bekommen.

249
Janak Nirmal

Ich denke, Sie erhalten das Array von der Antwort, so dass Sie dem Array die Antwort zuweisen müssen.

NSError * err = nil; 
 NSArray * array = [NSJSONSerialization JSONObjectWithData: Optionen [string dataUsingEncoding: NSUTF8StringEncoding]: NSJSONReadingMutableContainers error: & err];
NSString * test = [dictionary objectForKey: @ "ID"];
NSLog (@ "Test is% @", test);
14
MobileDev

Verwenden Sie diesen Code, wobei str Ihre JSON-Zeichenfolge ist:

NSError *err = nil;
NSArray *arr = 
 [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] 
                                 options:NSJSONReadingMutableContainers 
                                   error:&err];
// access the dictionaries
NSMutableDictionary *dict = arr[0];
for (NSMutableDictionary *dictionary in arr) {
  // do something using dictionary
}
6
Woodstock

Swift 3:

if let jsonString = styleDictionary as? String {
    let objectData = jsonString.data(using: String.Encoding.utf8)
    do {
        let json = try JSONSerialization.jsonObject(with: objectData!, options: JSONSerialization.ReadingOptions.mutableContainers) 
        print(String(describing: json)) 

    } catch {
        // Handle error
        print(error)
    }
}
1
Josh O'Connor

Verwenden Sie den folgenden Code, um das Antwortobjekt aus dem Fehlerblock AFHTTPSessionManager abzurufen. dann können Sie den generischen Typ in den erforderlichen Datentyp konvertieren:

id responseObject = [NSJSONSerialization JSONObjectWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] options:0 error:nil];
0
krish2me