我正在使用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"
}
}
}
答案 0 :(得分:1)
需要做的是使用result
和for-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']