2016-05-24 8 views
0

Hier verwandeln ist eine Antwort, die ich von einem Server erhalten:Wie eine JSON-Zeichenfolge zu NSArray

{ 
    result = { 
     blankfill = "[[1, [u'32354'], False, 7]]"; 
     choice = "[[13, [3], False, 11], [10, [0], False, 3], [9, [1], False, 3], [2, [2], False, 4], [3, [1], False, 3], [1, [2], False, 3]]"; 
     spendTime = 26; 
    }; 
    retcode = 0; 
    subjectid = 1; 
    submittime = "2016-05-24T15:21:50.784"; 
} 

choice ist die Zeichenfolge ich NSArray konvertieren will, es enthält auch verschachtelten Arrays. Hier

ist der Code, den ich versucht:

NSString *jsonString = [responseObject[@"result"] objectForKey:@"choice"]; 
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; 
NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; 

Derzeit arr ist immer gleich Null.

+1

„Sie können sehen, dass, Wahl ist ein NSString steht tatsächlich für eine NSArray auch verschachtelte Array mit“ Es ist nur eine Zeichenfolge enthält einige Kommas und Klammern. – matt

+1

Sie erhalten immer nil, weil das kein JSON ist, JSON hat keinen 'False' als Wert, siehe [json.org] (http://www.json.org). Es hätte jedoch "falsch". 'u'32354'' ist auch kein Wert. – Daniel

+0

@simpleBob: Das False ist nur fünf Zeichen innerhalb einer Zeichenfolge. Der Schlüssel "choice" hat einen String-Wert "[[13, [3], False ..." – gnasher729

Antwort

1

Sie müssen False zu false überall in Ihrer Zeichenfolge ändern. Dann wird es als JSON parsen.

(Es scheint wahrscheinlich, dass etwas auf der Serverseite falsch ist, though. Vermutlich ist dies angeblich ein JSON-Array sein, mit zu beginnen, und wegen dieser Kapitalisierung Fehler, sie als String ankommen statt.)

NSString* s = @"[[13, [3], false, 11], [10, [0], false, 3], [9, [1], false, 3], [2, [2], false, 4], [3, [1], false, 3], [1, [2], false, 3]]"; 
NSData *data = [s dataUsingEncoding:NSUTF8StringEncoding]; 
NSError* err; 
NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:0 error:&err]; 
NSLog(@"%@", arr); 

Logs:

(
     (
     13, 
       (
      3 
     ), 
     0, 
     11 
    ), 
     (
     10, 
       (
      0 
     ), 
     0, 
     3 
    ), 
     (
     9, 
       (
      1 
     ), 
     0, 
     3 
    ), 
     (
     2, 
       (
      2 
     ), 
     0, 
     4 
    ), 
     (
     3, 
       (
      1 
     ), 
     0, 
     3 
    ), 
     (
     1, 
       (
      2 
     ), 
     0, 
     3 
    ) 
) 
+0

Es funktioniert. Entschuldigung, ich habe das Falsche nicht bemerkt. Ich bekomme die Antwort von Python Restful Server. Wahr/Falsch ist in Python gültig, daher denke ich, dass sie nur das String-Format für ihr boolesches Feld zurückgeben. Entschuldigung für den Lärm. Ich werde die Antwort akzeptieren. – Wesley

+2

Das eigentliche Problem mit Ihrem Code war 'error: nil'. Der Fehler erklärte Ihnen, was das Problem war, aber Sie haben den Fehler weggeworfen, ohne ihn gelesen zu haben. – matt

+0

Siehe [Einführung in JSON] (http://www.json.org), nur 'true', ' false' und 'null' sind gültige Literalwerte, nicht' True' und 'False'. Was Python akzeptiert, ist nebensächlich. @matt weist darauf hin, Fehlermeldung ist dein Freund, benutze sie. – zaph