2017-10-25 2 views
0

zugreifen Ich versuche, Daten in einer JSON-Datei zuzugreifen, aber nicht ganz sicher, wie. Ich versuche, die "animation_file" in diesem json zuzugreifen:richtige Art und Weise json Daten in schnellen

"items": [{ 
        "newUser": { 
        "steps": [ 
           { 
           "id": 0, 
           "step_title": "stepConcept", 
           "visible": false, 
           "animation_file": "Welcome_Step_01_V01" 
           }, 
           { 
           "id": 1, 
           "step_title": "stepSafety", 
           "visible": true, 
           "animation_file": "Welcome_Step_02_V01" 
           }, 
           { 
           "id": 2, 
           "step_title": "stepFacilitator", 
           "visible": true, 
           "animation_file": "Welcome_Step_03_V01" 
           }, 
           { 
           "id": 3, 
           "step_title": "stepTransparency", 
           "visible": true, 
           "animation_file": "Welcome_Step_04_V01" 
           } 
           ] 
        }, 

Dies ist, was ich bisher:

guard let items = welcomeJSON["items"] as? [[String:Any]] else {return} 

     for item in items { 
      if (isNewUser) { 
       if let newUser = item["newUser"] as? [String:Any] { 
        if let steps = newUser["steps"] as? [[String:Any]] { 
         for embeddedDict in steps { 
          for (key, value) in embeddedDict { 
           if let val = value as? Bool, val == true { 
            print(key) 
            newUserViews.append(key) 
           } 
          } 
         } 
        } else { 
         listOfViews = newUserViews 
         listOfViews = [STEP_CONCEPT, STEP_SAFETY, STEP_FACILITATOR, STEP_TRANSPARENCY] 
         maxPages = listOfViews.count 
         return 
        } 
       } 
      } 

Ist dies richtig scheinen? Ich habe das Gefühl, dass ich einen Schritt verpasse.

+0

Sie haben den Wert für Schlüssel erhalten 'animation_file' sie den Wert für Schlüssel' newUser' wie immer oder 'steps' die gleiche Art und Weise ist. Und warum listen Sie das Wörterbuch auf, anstatt direkt den Wert für den Schlüssel "visible" zu erhalten? – vadian

Antwort

0

Wenn ich das richtig verstanden, versuchen Sie den Wert von „animation_file“ erhalten nur dann, wenn der Wert sichtbar ist wahr, und Sie wollen, um es in newUserViews Array. Der folgende Code soll dabei helfen:

guard let items = welcomeJSON["items"] as? [[String:Any]] else {return} 

    for item in items { 
     if (isNewUser) { 
      if let newUser = item["newUser"] as? [String:Any] { 
       if let steps = newUser["steps"] as? [[String:Any]] { 
        for embeddedDict in steps { 
         if let visible = newUser["visible"] as? Bool, visible == true, let animationFile = newUser["animation_file"] as? String { 
          newUserViews.append(animationFile) 
         } 
        } 
       } else { 
        listOfViews = newUserViews 
        listOfViews = [STEP_CONCEPT, STEP_SAFETY, STEP_FACILITATOR, STEP_TRANSPARENCY] 
        maxPages = listOfViews.count 
        return 
       } 
      } 
     } 
    } 

Rest des Codes nicht scheint nicht in meinem Kopf, korrekt zu sein, aber der Code oben sollte Ihr aktuelles Problem beheben.

Verwandte Themen