2017-10-25 15 views
0

私はjsonファイルのデータにアクセスしようとしていますが、方法は完全にはわかりません。私は、このJSONで「animation_file」にアクセスしようとしている:すぐにjsonデータにアクセスする適切な方法

"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" 
           } 
           ] 
        }, 

これは私がこれまで持っているものです。

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 
        } 
       } 
      } 

が、これは正しいように見えるしていますか?私は一歩足りないかもしれないような気がする。

+0

キー 'animation_file'の値を取得する必要があります。キー' newUser'または 'steps'の値を取得するのと同じ方法です。なぜ、キーの値を直接「可視」にするのではなく、辞書を列挙するのですか? – vadian

答えて

0

私が正しく理解していれば、visibleの値がtrueでnewUserViewsの配列に入れたい場合にのみ、 "animation_file"の値を取得しようとしています。以下のコードは、それのお手伝いをする必要がありますあなたのコードの

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 
       } 
      } 
     } 
    } 

残りは私の心に正しいように思われませんが、上記のコードでは、あなたの現在の問題を解決する必要があります。

関連する問題