2016-08-09 49 views
0

Ärger mit JSON Parsen in schnellen 1,2Ärger mit JSON Parsen in schnellen 1,2

Ich habe ein Problem mit dem Parsen von JSON, ich bin nicht immer die richtige Daten-Antwort für meine Parameter. Ich bin seit geraumer Zeit auf dem Thema festgefahren. Ich weiß nicht, wie ich es beheben kann. Ich bin neu in der iOS-Entwicklung. Ich habe auch keine Bibliothek von Drittanbietern verwendet. [Ich weiß nicht, wie ich sie benutzen soll.]

Ich bekomme die richtige Antwort für meine allererste Iteration, aber für die nächste Iteration wird die Ergebnisse der vorherigen Iteration hinzugefügt die neuen Ergebnisse. So, dass jedes Schleifenergebnis mit den Ergebnissen der vorherigen Iteration endet

Mein JSON SAMPLE. [kann Link zur Verfügung stellen, lassen Sie es mich wissen]

struct AssetItems { 
 
    
 
    var Name:String 
 
    var Desc:String 
 
    var Image:String 
 
    var entityId:String 
 
    
 
    var aFileType:String 
 
    var aFileSize:String 
 
    var aFileCreatedDate:String 
 
    var aFileRevisionDate:String 
 
    var aFileModifiedDate:String 
 
    var aProductName:String 
 
    var aVersion:String 
 
    var aAssetType:String 
 
    var aIsFolder:String 
 
    
 
    init(assetName:String,assetDescription:String,assetImage:String,entityId:String,FileType:String,FileSize:String,FileCretedDate:String,FileReveisionDate:String,FileModifiedDate:String,ProductName:String,Version:String,AssetType:String,IsFolder:String) { 
 
     
 
     
 
     
 
     self.Name = assetName 
 
     self.Desc = assetDescription 
 
     self.Image = assetImage 
 
     self.entityId = entityId 
 
     self.aFileType = FileType 
 
     self.aFileSize = FileSize 
 
     self.aFileCreatedDate = FileCretedDate 
 
     self.aFileRevisionDate = FileReveisionDate 
 
     self.aFileModifiedDate = FileModifiedDate 
 
     self.aProductName = ProductName 
 
     self.aVersion = Version 
 
     self.aAssetType = AssetType 
 
     self.aIsFolder = IsFolder 
 
    } 
 
} 
 

 

 

 
struct AssetModel { 
 
    var aName:String 
 
    var aDesc:String 
 
    var aCount:String 
 
    var aEntityId:String 
 
    var items:[AssetItems] 
 
    
 
    init(rackName:String,rackDescription:String,totalNoAssets:String,EntityId:String,rackItems:[AssetItems]) { 
 
     self.aName = rackName 
 
     self.aDesc = rackDescription 
 
     self.aCount = totalNoAssets 
 
     self.aEntityId = EntityId 
 
     self.items = rackItems 
 
    } 
 
    
 
} 
 

 
    
 
var assetData:Array<AssetModel> = Array<AssetModel>() 
 
var assetContents:Array<AssetItems> = Array<AssetItems>()

DIES IST WIE ICH BIN JSON Parsen

func get_data_from_Url(url:String) { 
 
     
 
     
 
     let url = NSURL(string: url) 
 
     var request:NSMutableURLRequest = NSMutableURLRequest(URL: url!) 
 
     request.HTTPMethod = "GET" 
 
     
 
     request.addValue("application/json", forHTTPHeaderField: "Content_Type") 
 
     request.addValue("application/json", forHTTPHeaderField: "Accept") 
 
     
 
     
 
     var responseError : NSError? 
 
     var response : NSURLResponse? 
 
     
 
     var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &responseError) 
 
     
 
     if(urlData != nil) { 
 
      
 
      var responseData:NSString = NSString(data: urlData!, encoding: NSUTF8StringEncoding)! 
 
      let res = response as! NSHTTPURLResponse 
 
      var err:NSError? 
 
      if (res.statusCode == 200) 
 
      { 
 
       var parseError: NSError? 
 
       let json:AnyObject = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &err) as AnyObject! 
 
       if (parseError == nil) // no error while parsing 
 
       { 
 
        if let Asset_list = json as? NSArray 
 
        { 
 
        for (var i = 0; i < Asset_list.count ; i++) 
 
        { 
 
        if let Asset_obj = Asset_list[i] as? NSDictionary 
 
        { 
 
        if let AssetGroupName = Asset_obj["Name"] as? String 
 
        { 
 
        if let AssetGroupDescription = Asset_obj["Description"] as? String 
 
        { 
 
        if let entityId = Asset_obj["EntityId"] as? String 
 
        { 
 
        if let totalAssets = Asset_obj["_NoOfAssets"] as? String 
 
        { 
 
        if let items = Asset_obj["Items"] as? NSArray 
 
        { 
 
        for (var j=0 ; j < items.count; j++) 
 
        { 
 
        if let asset_items = items[j] as? NSDictionary 
 
        { 
 
        if let AbsolutePath = asset_items["AbsolutePath"] as? String 
 
        { 
 
        if let Description = asset_items["_Description"] as? String 
 
        { 
 
        if let Name = asset_items["_Name"] as? String { 
 
        if let entityId = asset_items["EntityId"] as? String 
 
        { 
 
        if let FileType = asset_items["_FileType"] as? String 
 
        { 
 
        if let FileSize = asset_items["_FileSize"] as? String 
 
        { 
 
        if let FileCreatedDate = asset_items["CreatedDate"] as? String 
 
        { 
 
        if let FileModifiedDate = asset_items["ModifiedDate"] as? String 
 
        { 
 
        if let RevisionDate = asset_items["RevisionDate"] as? String 
 
        { 
 
        if let productName = asset_items["ProductName"] as? String 
 
        { 
 
        if let version = asset_items["Version"] as? String 
 
        { 
 
        if let AssetType = asset_items["_AssetType"] as? String 
 
        { 
 
        if let isFolder = asset_items["IsFolder"] as? String 
 
        { 
 
         
 
                                
 
       var add = AssetItems(assetName: Name, assetDescription: Description, assetImage: AbsolutePath, entityId: entityId, FileType: FileType, FileSize: FileSize, FileCretedDate: FileCreatedDate, FileReveisionDate: RevisionDate, FileModifiedDate: FileModifiedDate, ProductName: productName, Version: version, AssetType: AssetType, IsFolder: isFolder) 
 
        assetContents.append(add) 
 

 
         } 
 
         } 
 
         } 
 
         } 
 
         } 
 
         } 
 
        } 
 
        } 
 
        } 
 
       } 
 
       } 
 
                    
 
       } 
 
       } 
 
         
 
       } 
 
         
 
       } 
 
      var add_it = AssetModel(rackName: AssetGroupName, rackDescription: AssetGroupDescription, totalNoAssets: totalAssets, EntityId: entityId, rackItems: assetContents) 
 
       assetData.append(add_it) 
 
         
 
         } 
 
        } 
 
              
 
        } 
 
         
 
        } 
 
         
 
        } 
 
         
 
        } 
 
        } 
 
        } 
 
       } 
 
       
 
      } 
 
     } 
 
     
 
     
 
     
 
     do_table_refresh() 
 
    } 
 

 
func do_table_refresh() 
 
    { 
 
     dispatch_async(dispatch_get_main_queue(), 
 
      { 
 
       self.tableView.reloadData() 
 
       
 
     }) 
 
     
 
     return 
 
    }

Mein Out Setzen Sie

Bitte helfen Sie mir ein, dies zu beheben, Jeder Vorschlag wird auch tun.

DANK

+1

Wenn Sie neu bei Swift sind, starten Sie nicht mit einer veralteten Version der Sprache. Die neueste Version ist 2.2 und Swift 3 wird in ein paar Wochen veröffentlicht. Und beachten Sie, dass Sie die Namenskonvention einhalten müssen: Variablennamen beginnen immer mit einem Kleinbuchstaben und keinen PHP/JavaScript Unterstreichungsseparatoren. – vadian

+0

danke für die Antwort, ich begann dieses Projekt lange zurück, jetzt kann ich nicht die ganze Sache ändern ... –

+0

Sie können nicht oder wollen Sie nicht? ;-) – vadian

Antwort

1

Besonderen Dank geht an @SMi mit seinem Guidlines konnte ich mein Problem lösen. Ich wusste, dass ich die innere Anordnung am Ende der Schleife löschen hatte [Aber wußte nicht, wie das löschen.]

var add_it = AssetModel(rackName: AssetGroupName, rackDescription: AssetGroupDescription, totalNoAssets: totalAssets, EntityId: entityId, rackItems: assetContents) 
     assetData.append(add_it) 
assetContents.removeAll() 

Alles, was ich tun musste, ist zu verwenden, um den .removeAll() Methode zum Löschen der AssetContents Array.