2014-06-16 15 views
9

So verwende ich AFNetworking 2.0 (ObjC Rahmen mit Bridging-Header), um einige Anfragen auf einem lokalen Server zu machen. Ich habe ein paar Tutorials gefolgt, um es mit Swift zu programmieren. Dies ist der Code:iOS Swift: Antwort Antwort Json mit AFNetworking

var success = { (operation:AFHTTPRequestOperation!, response:AnyObject!) -> Void in 
    println(response.description) 
    successBlock(result:response.description) 
} 

var failure = { (operation:AFHTTPRequestOperation!, response:NSError!) -> Void in 
    println(response.description) 
    errorBlock(error:response.description) 
} 

var manager = AFHTTPRequestOperationManager() 
manager.responseSerializer = AFJSONResponseSerializer(); 
manager.GET("http://127.0.0.1:8080/api/manufacturer", parameters: nil, success: success, failure: failure) 

Er ruft den JSON ab und druckt ihn erfolgreich. Die Antwort ist so etwas wie diese:

(
     { 
     "_id" = 539f0973e3c7f4ab1f6078f5; 
     name = Manufacturer01; 
    }, 
     { 
     "_id" = 539f18c5e3c7f4ab1f6078f6; 
     name = Manufacturer02; 
    } 
) 

aber ich bin nicht in der Lage, es zu analysieren ... Ich response[0] versucht, das erste Element zu erhalten, aber es stürzt den Simulator und sogar Xcode6, wenn ich versuche zu tun: (lldb) > po response[0]. Ich habe alles versucht, jedes Beispiel, das ich gesehen habe, erklärt, wie man das Ergebnis druckt, aber nichts über das Parsen jedes Feldes.

Das response Objekt sieht wie folgt aus, wenn ich versuche, es zu debuggen:

value = Some { 
    Some = (instance_type = Builtin.RawPointer = 0x0b240710 -> 0x00bc5da0 (void *)0x00bc5db4: __NSCFArray) 
    } 

Jeder Hinweis? Danke im Voraus!

+0

Ich habe auch dieses Problem. Wie auf der Erde weise ich die JSON-Dictionary-Werte einer String-Variablen zu? Ich habe eine var 'var serverID: String?' Und beim Versuch 'self.serverID = responseObject [" server_id "] als? String 'es stürzt ab Xcode – Sean

+0

Ich hatte Erfolg mit diesem Ansatz: http://stackoverflow.com/questions/24259756/unable-to-parse-json-from-afnetworkings-responseobject – heycarsten

+0

@heycarsten Leider bekomme ich EXC_BAD_INSTRUCTION auf Simulator und EXC_BREAKPOINT auf Gerät mit diesem Code. :( – Koesh

Antwort

-5

Ihre Beispielantwort ist kein gültiger JSON.

Wenn Ihr Beispiel ein Array ist, würde JSON eckige Klammern anstelle von Parens haben, Feldnamen in Anführungszeichen und Doppelpunkte anstelle von Gleichheitszeichen. Zum Beispiel:

[ 
    { 
    "_id": 1234, 
    "name": "foo bar" 
    }, 
    { 
    "_id": 12122, 
    "name": "baz" 
    } 
] 

Auch einer der JSON-Linters sehen, z.B .: jsonlint.com

+1

Es ist wahrscheinlich der Inhalt des Wörterbuchs im Debugger gedruckt. – mAu

+1

@ mAu hat recht, der json ist gut aufgebaut, das ist die Debugger-Darstellung. – Koesh

1

versuchen diese

if let responseArray = response as? NSArray { 
    let firstElement = responseArray[0] 
    // do something with the first element 
} 
0

Ich denke, Ihr Problem, das es zurück in das Senden in der successBlock legt. Da die abgerufenen Informationen im Beschreibungsobjekt nicht korrekt dargestellt werden.

var jsonArrayDictionary = response.result.value as? [[String: Any]] 

for item in jsonArrayDictionary { 
    dump(item["_id"] as? String) 
    dump(item["name"] as? String) 
} 

Das sollte wahrscheinlich tun.