如何在Firebase

时间:2016-08-02 23:57:01

标签: python arrays json firebase firebase-realtime-database

我正在使用Python通过Firebase数据库返回一个对象数组,然后随机选择一个并返回其值。我一直在使用我手动构建并导入Firebase的小型测试JSON数据库。当我这样做时,DB的子节点是0, 1, 2等...使用下面的代码 - 我可以遍历数据并抓住我需要的东西。

我一直在构建一个CMS,它允许我使用push()方法将数据直接输入Firebase(而不是导入本地JSON文档)。

因此,子节点变为模糊的时间戳,如下所示:K036VOR90fh8sd80, KO698fhs7Hf8sfds等......

现在,当我尝试循环遍历节点时,我在ln9 caption=....处收到以下错误:

TypeError: string indices must be integers

我假设发生了这种情况,因为子节点现在是字符串。由于我必须使用CMS - 我现在如何循环这些节点?

代码:

if 'Item' in intent['slots']:
    chosen_item = intent['slots']['Item']['value']

    result = firebase.get(chosen_item, None)

    if result:
        item_object = []
        for item in result:
            item_object.append(item)

            random_item = (random.choice(item_object))
            caption = random_item['caption']
            audio_src = random_item['audioPath']

以下是Firebase的近似内容:

 {
    "1001" : {
"-K036VOR90fh8sd80EQ" : {
  "audioPath" : "https://s3.amazonaws.com/bucket-output/audio/audio_0_1001.mp3",
  "caption" : "Record 0 from 1001"
},
"-KO698fhs7Hf8sfdsWJS" : {
  "audioPath" : "https://s3.amazonaws.com/bucket-output/audio/audio_1_1001.mp3",
  "caption" : "Record 1 from 1001"
  }
 },
 "2001" : {
  "-KOFsPBMKVtwHSOfiDJ" : {
  "audioPath" : "https://s3.amazonaws.com/bucket-output/audio/audio_0_2001.mp3",
  "caption" : "Record 0 from 2001"
},
"-KOFsQvwgF9icSIolU" : {
  "audioPath" : "https://s3.amazonaws.com/bucket-output/audio/audio_1_2001.mp3",
  "caption" : "Record 1 from 2001"
  }
 }
}

1 个答案:

答案 0 :(得分:1)

需要做的是使用resultfor-loop Python方法剥离父节点的字典.items() - 通过键值(k,v )和.append值(v)。

这会删除父级Firebase词典键的result,即-KOFsQvwgF9icSIolU

if 'Item' in intent['slots']:
    chosen_item = intent['slots']['Item']['value']

    result = firebase.get(chosen_item, None)

    if result:
        item_object = []
        for k,v in result.items():
            item_object.append(v)

            random_item = (random.choice(item_object))
            caption = random_item['caption']
            audio_src = random_item['audioPath']