2016-08-04 29 views
0

Ich habe die folgenden Daten im JSON-Format heruntergeladen.Analysieren von Daten mit NSJSONSerialization.JSONObjectWithData(), kann aber nicht auf Array-Gruppen zugreifen Nur Strings

{"name":"Shropshire Outage","nc_lead":"John Smith","dma":"11/111","username":"vwaghx1","status":"REOPENED","sapOrder":"12341245","ccsText":"123","nbPropAtRisk":12,"logs":[{"dateTime":"2016-04-07 20:02:42","valveStatusChangeDateTime":"2016-04-07 20:02:00","user":"vwaghx1","uid":null,"task":"CUSTPOORSUPPLIES","id_log":1489},{"dateTime":"2016-04-07 20:03:35","valveStatusChangeDateTime":"2016-04-07 20:02:00","user":"vwaghx1","uid":1238768765,"task":"PRESSURELOGGER","id_log":1490},{"dateTime":"2016-04-07 20:04:36","valveStatusChangeDateTime":"2016-04-07 20:02:00","user":"vwaghx1","uid":7692466478,"task":"CUSTSUPPLIESRESTOREDSOME","id_log":1491}],"id_event":601,"region":"Shropshire","trigger":"No Supply Call”,”valveOps":[{"dateTime":"2016-04-07 20:06:12","user":"vwaghx1","uid":7866756788,"x":678666,"y":723325,"description”:”Burst main downstream valve","id_valve_op":523},{"dateTime":"2016-04-07 20:05:31","user":"vwaghx1","uid":5674456470,"x":344534,"y":723433,"description":"Valve to separate both rezones","id_valve_op":522},{"dateTime":"2016-04-14 12:32:00","user":"vwaghx1","uid":1234512345,"x":123123,"y":123123,"description":"test","id_valve_op":541}],"images":[{"name":"After improvement.jpg","dateTimeCreated":"2016-04-08 14:10:30","contentType":"image/jpeg","caption":null,"uuid":null,"fileExtension":"jpeg","id_image":661},...]} 

Allerdings, wenn ich versuche, es zu analysieren den Code unten verwenden, ich nur die String-Werte wie "name" zugreifen kann, "nc_lead", "Region" usw.

if let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments) as? Array<Dictionary<String, AnyObject>> { 
    for item in json { 
     if let dict = item as? Dictionary<String, AnyObject> { 
      if let nameStr = dict["name"] as? String { 
       incidentList.valueStr = nameStr 
      } 
      if let codeStr = dict["dma"] as? String { 
       incidentList.valueStr = codeStr 
      } 
      if let region = dict[“region”] as? String { 
       incidentList.valueStr = region 
      } 
      if let ncLead = dict[“nc_lead”] as? String { 
       incidentList.valueStr = ncLead 
      } 

I müssen auf die Gruppenwerte wie "logs", "images" und "valveOps" zugreifen, die in Arrays eigene String-Werte haben. Wie kann ich meinen Code ändern, so dass ich wie bisher auf die Strings zugreifen und die Gruppen auch in Arrays laden kann?

+2

Gleiche Idee Sie bereits verwenden, sondern auf die JSON-Struktur anzupassen. Wie 'item [" valveOps "] als? [[String: AnyObject]] '(Array von Wörterbüchern) und so weiter und so fort. – Moritz

Antwort

0

Sie können auf diese Weise versuchen, 3 Array zuerst zu deklarieren.

var logArr: [[String: AnyObject]] = [[String: AnyObject]]() 
var imageArr: [[String: AnyObject]] = [[String: AnyObject]]() 
var valveArr: [[String: AnyObject]] = [[String: AnyObject]]() 

nun dieses Array verwenden, wo Sie bekommen Antwort

if let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments) as? Array<Dictionary<String, AnyObject>> { 
for item in json { 
    if let dict = item as? Dictionary<String, AnyObject> { 
     if let nameStr = dict["name"] as? String { 
      incidentList.valueStr = nameStr 
     } 
     if let codeStr = dict["dma"] as? String { 
      incidentList.valueStr = codeStr 
     } 
     if let region = dict["region"] as? String { 
      incidentList.valueStr = region 
     } 
     if let ncLead = dict["nc_lead"] as? String { 
      incidentList.valueStr = ncLead 
     } 
     if let logs = dict["logs"] as? [[String: AnyObject]] { 
      self.logArr = logs 
     } 
     if let valveOps = dict["valveOps"] as? [[String: AnyObject]] { 
      self.valveArr = valveOps 
     } 
     if let images = dict["images"] as? [[String: AnyObject]] { 
      self.imageArr = images 
     } 
+0

Ja und es hat funktioniert, danke – user616076