2016-06-03 1 views
3

Я пытаюсь получить ключи вложенных узлов в Firebase, и я не уверен, как это сделать.Как мне пройти цикл и получить все ключи вложенных узлов в firebase?

Например, в данном случае:

example

Как я знаю, что 2,3,4 существуют в пределах 1?

Я думаю о размещении значений в списке отдельно в firebase. Но есть ли более разумный способ сделать это? Есть ли более эффективный способ получения ключей всех вложенных узлов в Firebase?

+0

Вы включили изображение вашего дерева JSON в свой вопрос. Пожалуйста, замените это на фактический JSON как текст, который вы легко можете получить, нажав кнопку «Экспорт» в базе данных Firebase. Наличие JSON в качестве текста делает его доступным для поиска, позволяет нам легко использовать его для тестирования с вашими фактическими данными и использовать его в нашем ответе, и в целом это просто хорошая вещь. –

+0

oops sorry, im new для stackoverflow. В следующий раз. Спасибо за ответ! – ndduong

ответ

6

В Android

Дает доступ ко всем непосредственных детей этого снимка. Может быть использован в родной для петель:

for (DataSnapshot child : parent.getChildren()) { 
    //Here you can access the child.getKey() 
} 

В прошивкой

Swift 3:

for (child in snapshot.children) { 
    //Here you can access child.key 
} 

Swift 4:

snapshot.children.forEach({ (child) in 
    <#code#> 
}) 

В Web

snapshot.forEach(function(childSnapshot) { 
    //Here you can access childSnapshot.key 
}); 

Вы можете поместить его в другой список или по тому же пути, важно помнить, сколько данных вы действительно извлекаете при вызове события. И как вы собираетесь запрашивать эту информацию ... поэтому рекомендуется, чтобы в NoSQL сохранялись плоские узлы

0

Вам необходимо работать с массивами словарей. Итерации по каждому из словарей, тогда вам нужно проверить, присутствует ли ключ ИЛИ нет. Потому что в Firebase нам нужно отправить определенные ключи на сервер.

СВИФТ

let key = "1" 
    for child in snapshot.children { 
     if let snap = child.childSnapshotForPath(key){ 
      print("Able retrieve value : \(snap) for key : \(key)") 
     } else { 
      print("Unable to retrieve value for key : \(key)") 
     } 
    } 

Objective-C

NSString *key = @"1"; 
for (NSDictionary *dic in array) { 
    NSArray *keys = [dic allKeys]; 
    if ([keys containsObject:key]){ 

    } 
} 
+0

Вопрос отмечен как «быстрый»: напишите свои примеры кода в Swift. Спасибо. – Moritz

+1

Благодарим за редактирование. // 'Вопрос также отмечен как iOS' Да, и? Сам iOS не означает Objective-C, это просто означает iOS. Для кода * для * iOS есть Objective-C, а также Swift сейчас, а Ruby и JavaScript ... iOS - это просто платформа, она не связана с одним конкретным языком и, конечно же, не с Objective-C по умолчанию. – Moritz

0

Я нашел способ перебора вложенную JSON, ключ является случайным.

var ref = FIRDatabase.database().reference(withPath: "timinig") 
    ref.observeSingleEvent(of: .value, with: { snapshot in 
     print(snapshot.childrenCount) // I got the expected number of items 
     let enumerator = snapshot.children 
     while let rest = enumerator.nextObject() as? FIRDataSnapshot { 
      print("-") 

      print(rest.key) 
      let newobj=rest.children 
      while let rest1 = newobj.nextObject() as? FIRDataSnapshot { 
       print(rest1.key) 
      } 
      print("-") 
     } 
Смежные вопросы