title: how to recursively iterate over json object/array
body: <p>I am trying to figure out how to recursively iterate over this JSON no matter how many levels of nesting are present when I get this data as the amount of nesting can be any amount. I can get it to go one level deep but then it seems no matter what I do, if I want an additional level of nesting, I have to put in a test for children and although that may be correct it just doesn't seem it.</p>
  
  <p>What I would like to end up with is a new data set with a 'next_id' added if the current element being looked at has a sibling or if it has a child etc.</p>
  
  <p>I'm pretty confused so I hope this makes sense.</p>
  
  <p>I've tried this:</p>
  
  <pre><code>    function visit(obj){
  var msg = '';
  for(var prop in obj){
      if(typeof(obj[prop]) == 'object'){
          if(Object.prototype.toString.call(obj[prop]) == '[object Array]'){
              for(var i = 0; i &lt; obj[prop].length; i++){
                  msg += "the element " + prop + " (array) was visited: " + obj[prop][i].key + "\n";
                  if (  obj[prop][i].children )
                  {
                      msg += "the element " + prop + " (array-CHILDREN) was visited: " + obj[prop][i].key + "\n";
                      for ( y=0;y&lt;obj[prop][i].children.length;y++ )
                      {
                          msg += "the element " + prop + " (array-HELLO) was visited: " + obj[prop][i].children[y].title + "\n";
                          if (  obj[prop][i].children[y].children )
                          {
                              msg += "the element " + prop + " (array-HELLO-CHILD) was visited: " + obj[prop][i].children[y].title + "\n";
                              $.each(obj[prop][i].children[y].children, function( index, value ) {
                                  alert( "red alert " + value.title );
                                  msg += "the element " + prop + " (CHILD-CHILD) was visited: " + i + ": " + index + ": " + value.title + "\n";
                                  visit(value);  
                              });
                          }
  
                      }
                  }
              }
          }else{
              msg += "the element " + prop + " (object) was visited"  + "hello" + "\n";
              visit(obj[prop]);
          }
      }else{
          msg += "the element " + prop + " = " + obj[prop] + " was visited"  + "\n";
      }
  }
  return msg;
  </code></pre>
  
  <p>}</p>
  
  <p>and I call it with:
  visit(d) where 'd' is the data below.</p>
  
  <p>Thanks in advance for any help.</p>
  
  <p>So, here is my data:</p>
  
  <pre><code>    {
  "key": "root_1",
  "title": "root",
  "children": [
      {
          "key": "1",
          "title": "Title Goes Here",
          "data": {
              "can_drag": false,
              "can_drop": false
          }
      },
      {
          "folder": false,
          "key": "_1",
          "title": "Text for regular step goes here",
          "data": {
              "step_type": "span",
              "imagePath": "images/",
              "icon": "text_align_center.png",
              "can_drag": true,
              "can_drop": [
                  "before",
                  "after"
              ]
          }
      },
      {
          "folder": false,
          "key": "_2",
          "title": "Text for regular step goes here",
          "data": {
              "step_type": "span",
              "imagePath": "images/",
              "icon": "text_align_center.png",
              "can_drag": true,
              "can_drop": [
                  "before",
                  "after"
              ]
          }
      },
      {
          "expanded": true,
          "folder": true,
          "key": "_3",
          "title": "Fork question here",
          "data": {
              "step_type": "fork",
              "imagePath": "images/",
              "icon": "fork.gif",
              "can_drag": true,
              "can_drop": false
          },
          "children": [
              {
                  "expanded": true,
                  "key": "_4",
                  "title": "branch 1 answer text",
                  "data": {
                      "step_type": "fork_branch",
                      "imagePath": "images/",
                      "icon": "arrow_right.png",
                      "can_drag": true,
                      "can_drop": false
                  },
                  "children": [
                      {
                          "key": "_5",
                          "title": "branch 1 answer text first step",
                          "data": {
                              "imagePath": "images/",
                              "icon": "text_align_center.png",
                              "step_type": "step",
                              "can_drag": true,
                              "can_drop": false
                          }
                      },
                      {
                          "expanded": true,
                          "folder": true,
                          "key": "_8",
                          "title": "Fork question here",
                          "data": {
                              "step_type": "fork",
                              "imagePath": "images/",
                              "icon": "fork.gif",
                              "can_drag": true,
                              "can_drop": false
                          },
                          "children": [
                              {
                                  "expanded": true,
                                  "key": "_9",
                                  "title": "branch 1 answer text",
                                  "data": {
                                      "step_type": "fork_branch",
                                      "imagePath": "images/",
                                      "icon": "arrow_right.png",
                                      "can_drag": true,
                                      "can_drop": false
                                  },
                                  "children": [
                                      {
                                          "key": "_10",
                                          "title": "branch 1 answer text first step",
                                          "data": {
                                              "imagePath": "images/",
                                              "icon": "text_align_center.png",
                                              "step_type": "step",
                                              "can_drag": true,
                                              "can_drop": false
                                          }
                                      },
                                      {
                                          "expanded": true,
                                          "folder": true,
                                          "key": "_13",
                                          "title": "Fork question here",
                                          "data": {
                                              "step_type": "fork",
                                              "imagePath": "images/",
                                              "icon": "fork.gif",
                                              "can_drag": true,
                                              "can_drop": false
                                          },
                                          "children": [
                                              {
                                                  "expanded": true,
                                                  "key": "_14",
                                                  "title": "branch 1 answer text",
                                                  "data": {
                                                      "step_type": "fork_branch",
                                                      "imagePath": "images/",
                                                      "icon": "arrow_right.png",
                                                      "can_drag": true,
                                                      "can_drop": false
                                                  },
                                                  "children": [
                                                      {
                                                          "key": "_15",
                                                          "title": "branch 1 answer text first step",
                                                          "data": {
                                                              "imagePath": "images/",
                                                              "icon": "text_align_center.png",
                                                              "step_type": "step",
                                                              "can_drag": true,
                                                              "can_drop": false
                                                          }
                                                      },
                                                      {
                                                          "folder": false,
                                                          "key": "_19",
                                                          "title": "End script text goes here",
                                                          "data": {
                                                              "step_type": "end",
                                                              "imagePath": "images/",
                                                              "icon": "text_align_center.png",
                                                              "can_drag": true,
                                                              "can_drop": false
                                                          }
                                                      }
                                                  ]
                                              },
                                              {
                                                  "expanded": true,
                                                  "key": "_16",
                                                  "title": "branch 2 answer text",
                                                  "data": {
                                                      "step_type": "fork_branch",
                                                      "imagePath": "images/",
                                                      "icon": "arrow_right.png",
                                                      "can_drag": true,
                                                      "can_drop": false
                                                  },
                                                  "children": [
                                                      {
                                                          "key": "_17",
                                                          "title": "branch 2 answer text first step",
                                                          "data": {
                                                              "imagePath": "images/",
                                                              "icon": "text_align_center.png",
                                                              "step_type": "step",
                                                              "can_drag": true,
                                                              "can_drop": false
                                                          }
                                                      },
                                                      {
                                                          "folder": false,
                                                          "key": "_20",
                                                          "title": "Text for regular step goes here",
                                                          "data": {
                                                              "step_type": "span",
                                                              "imagePath": "images/",
                                                              "icon": "text_align_center.png",
                                                              "can_drag": true,
                                                              "can_drop": [
                                                                  "before",
                                                                  "after"
                                                              ]
                                                          }
                                                      },
                                                      {
                                                          "folder": false,
                                                          "key": "_21",
                                                          "title": "End script text goes here",
                                                          "data": {
                                                              "step_type": "end",
                                                              "imagePath": "images/",
                                                              "icon": "text_align_center.png",
                                                              "can_drag": true,
                                                              "can_drop": false
                                                          }
                                                      }
                                                  ]
                                              }
                                          ]
                                      }
                                  ]
                              },
                              {
                                  "expanded": true,
                                  "key": "_11",
                                  "title": "branch 2 answer text",
                                  "data": {
                                      "step_type": "fork_branch",
                                      "imagePath": "images/",
                                      "icon": "arrow_right.png",
                                      "can_drag": true,
                                      "can_drop": false
                                  },
                                  "children": [
                                      {
                                          "key": "_12",
                                          "title": "branch 2 answer text first step",
                                          "data": {
                                              "imagePath": "images/",
                                              "icon": "text_align_center.png",
                                              "step_type": "step",
                                              "can_drag": true,
                                              "can_drop": false
                                          }
                                      },
                                      {
                                          "folder": false,
                                          "key": "_22",
                                          "title": "End script text goes here",
                                          "data": {
                                              "step_type": "end",
                                              "imagePath": "images/",
                                              "icon": "text_align_center.png",
                                              "can_drag": true,
                                              "can_drop": false
                                          }
                                      }
                                  ]
                              }
                          ]
                      }
                  ]
              },
              {
                  "expanded": true,
                  "key": "_6",
                  "title": "branch 2 answer text",
                  "data": {
                      "step_type": "fork_branch",
                      "imagePath": "images/",
                      "icon": "arrow_right.png",
                      "can_drag": true,
                      "can_drop": false
                  },
                  "children": [
                      {
                          "key": "_7",
                          "title": "branch 2 answer text first step",
                          "data": {
                              "imagePath": "images/",
                              "icon": "text_align_center.png",
                              "step_type": "step",
                              "can_drag": true,
                              "can_drop": false
                          }
                      },
                      {
                          "folder": false,
                          "key": "_18",
                          "title": "End script text goes here",
                          "data": {
                              "step_type": "end",
                              "imagePath": "images/",
                              "icon": "text_align_center.png",
                              "can_drag": true,
                              "can_drop": false
                          }
                      }
                  ]
              }
          ]
      }
  ]
  </code></pre>
  
  <p>}</p>