Python 2.7 如何将python json.dumps作为一个有效负载存储到firebase中;不使用firebase自动在每个对象前面创建索引

Python 2.7 如何将python json.dumps作为一个有效负载存储到firebase中;不使用firebase自动在每个对象前面创建索引,python-2.7,firebase-realtime-database,Python 2.7,Firebase Realtime Database,第一次贴海报,我不是一个真正的开发人员,所以透视图总是很受欢迎:) 目标: 我试图将一个json.dumps(mergedFile)作为一个有效负载放入(或修补)firebase,而firebase不会在每个对象前面自动创建索引(0、1等) 问题陈述: 我正在将以下json对象提交到/testObject路径中: [{“test1”:“226.69”},{“test2”:“7.48”}] 在firebase中,响应存储为: [ { “testObject”:{ 0: { “测试1”:“22

第一次贴海报,我不是一个真正的开发人员,所以透视图总是很受欢迎:)

目标:

  • 我试图将一个json.dumps(mergedFile)作为一个有效负载放入(或修补)firebase,而firebase不会在每个对象前面自动创建索引(0、1等)
问题陈述:

  • 我正在将以下json对象提交到/testObject路径中:

    [{“test1”:“226.69”},{“test2”:“7.48”}]

  • 在firebase中,响应存储为:

    [ { “testObject”:{ 0: { “测试1”:“226.69” }, 1: { “测试2”:“7.48” } } } ]

背景:

  • 我需要存储的数据有效负载中的项目总数为 刚刚超过5000
  • 如果我通过for循环解析每个对象,那么数据将被写入 但是,预期它会为每一次it迁移启动一个新的请求 与仅 在一个请求中转储一个大对象
这是我的密码:

import json
import requests
import xml.etree.ElementTree as ET

def get_data():
    try:
        print 'hampsters are running...'

        # OFFLINE TESTING
        sourceFile = 'response.xml'
        tree = ET.parse(sourceFile)
        root = tree.getroot()

        for symbol in root.iter('symbol'):
            company = symbol.attrib['company']
            location = symbol.attrib['location']
            destinationData = {company: location}
            mergedFile.append(destinationData)
        print('downlaoding the info was a success! :)')
    except:
       print 'Attempt to download information did not complete successfully :('

def patch_data():
    try:
        print 'attempting to upload info to database...'
        data = json.dumps(mergedFile)
        print data
        try:
            req = requests.put(url, data=data, headers=headers)
            req.raise_for_status()
        except requests.exceptions.HTTPError as e:
            print e
            print req.json()
        print 'upload to database complete!'
    except:
       print 'Attempt to upload information did not complete successfully :('

if __name__ == "__main__":
    mergedFile = []

    auth = "*****"
    databaseURL = 'https://*****.firebaseio.com'
    headers = {"auth": auth, "print": "pretty"}
    # headers = {"auth": auth, "print": "pretty", "Accept": "text/event-stream"}
    requestPath = '/testObject.json?auth=' + auth
    url = databaseURL + requestPath

    get_data()
    patch_data()
我觉得它是在存储一个数组,但我在put请求之前利用data=json.dumps(mergedFile)。我是否对json.dumps的工作原理有误解?根据请求之前的输出,我觉得它看起来不错。我还利用了请求python模块。。。这是将数据转换为数组吗

任何人如能提供任何见解,将不胜感激

问候,


James.

Firebase数据库将数组存储为常规的键值对,键值为数字。所以你看到的是预期的行为

Firebase不建议在数据库中存储阵列的原因有很多。在这些链接中可以找到一些:


正如Frank van Puffelen提到的,这是基于我提交的数据的预期行为。我无意中创建了一个数组而不是dict。调整了两行:mergedFile=[]到mergedFile={},然后调整了dict从mergedFile.append(destinationData)到mergedFile.update(destinationData)的更新。谢谢@Frank,我很感谢这些链接,我一定会查看它们的。正如你提到的,这是基于我提交的数据。。。在将其转换为dict后,其工作状态与预期一致。很高兴听到!如果我的答案有用,请单击其左侧的向上投票按钮。如果它回答了您的问题,请单击复选标记接受它。这样别人就知道你得到了(足够的)帮助。真的!我还没有足够的rep来显示它,但它确实声明它是录制的。再次感谢弗兰克,谢谢你。