2013-06-05 2 views
1

i ve a json object, как показано ниже.Итерация и захват подмножества json

[{ 
"data":{ 
    "title":"Root" 
}, 
"attr":{ 
    "id":1, 
    "parentId":0 
}, 
"state":"open", 
"children":[{ 
     "data":{ 
      "title":"Stem" 
     }, 
     "attr":{ 
      "id":11, 
      "parentId":1 
     }, 
     "state":"open", 
     "children":[{ 
       "data":{ 
        "title":"Branch 1" 
       }, 
       "attr":{ 
        "id":111, 
        "parentId":11 
       }, 
       "state":"open", 
       "children":[{ 
         "data":{ 
          "title":"Sub Branch 1" 
         }, 
         "attr":{ 
          "id":1111, 
          "parentId":111 
         }, 
         "state":"open", 
         "children":[{ 
          "data":{ 
           "title":"Leaf" 
          }, 
          "attr":{ 
           "id":111111, 
           "parentId":111 
          } 
         }] 
        }, 

        { 
         "data":{ 
          "title":"Sub Branch 2" 
         }, 
         "attr":{ 
          "id":111111, 
          "parentId":111 
         } 
        } 
       ] 
      }, 

      { 
       "data":{ 
         "title":"Branch 2" 
        }, 
        "attr":{ 
         "id":119, 
         "parentId":11 
        }, 
        "state":"open", 
        "children":[{ 
          "data":{ 
           "title":"Sub branch" 
          }, 
          "attr":{ 
           "id":120, 
           "parentId":119 
          } 
         } 
        ] 
      } 
     ] 
    } 
] 
}] 

в основном структура будет выглядеть следующим образом

я в идентификатор всех узлов в атрибутах (атр). , когда задан ID любого узла, я хочу получить json этого узла и его дочерних элементов.

Для примера. с данным идентификатором говорят 111, то для этого JSON и его дети будут

{ 
"data":{ 
    "title":"Branch 1" 
}, 
"attr":{ 
    "id":111, 
    "parentId":11 
}, 
"state":"open", 
"children":[{ 
    "data":{ 
     "title":"Sub Branch 1" 
    }, 
    "attr":{ 
     "id":1111, 
     "parentId":111 
    }, 
    "state":"open", 
    "children":[{ 
     "data":{ 
      "title":"Leaf" 
     }, 
     "attr":{ 
      "id":111111, 
      "parentId":111 
     } 
    }] 
    }, 

    { 
     "data":{ 
      "title":"Sub Branch 2" 
     }, 
     "attr":{ 
      "id":111111, 
      "parentId":111 
     } 
    } 
] 
} 

я хочу, чтобы получить этот JSON, когда я ввести идентификатор 111. Как я сделать это ??

EDIT: У меня есть графический интерфейс для ввода идентификатора узла. и скажу, что я вхожу в 111, я должен уметь использовать json, как указано выше. Мне просто нужно, как это сделать в js или jQuery. Я не забочусь о пользовательском интерфейсе.

Спасибо.!

+0

, на каком языке? – HAS

+0

, конечно, javascript/jQuery. – Teja

ответ

1
function getNodeById(nodes, wantId) { 
    var search = nodes.slice(0);  

    while (node = search.shift()) { 
     if (node.attr.id == wantId) { 
      return node; 
     } 

     if (node.children) { 
      search.push.apply(search, node.children); 
     } 
    } 

    return false; 
} 

Если вы передаете его любой уровень вашего объекта, он будет рекурсивно искать через объект и ребенок, пока не найдет соответствующий идентификатор, в противном случае вернет ложь.

Для вызова функции:

var node = getNodeById(myArray, 1111); 
console.log(node); 
+0

Я получаю сообщение об ошибке «search.shift() не является функцией» в firebug. Можете привести подробный пример? Спасибо! – Teja

+0

Пропустили ли вы массив '[]' в соответствии с вашими данными примера? – itsmejodie

+0

Нет! Я просто передаю идентификатор единственного узла, т. Е. Node.attr («id»). Я хочу извлечь все детали, как упоминалось в вопросе !! Чтобы быть ясным, я использую jstree для перепечатки данных json в формате дерева. – Teja

Смежные вопросы