【发布时间】:2021-08-08 19:44:52
【问题描述】:
我有一个有序但大的 Json 对象数组,它遵循这个结构:
{
"object1":[
{
"data1":19.77,
"data2":-0.953125,
"data3":-0.265625,
"id":17231,
"date":"2021-05-14/08:38:47.471"
},
{
"data1":19.77,
"data2":-0.953125,
"data3":-0.265625,
"id":17231,
"date":"2021-05-14/08:38:47.596"
},
{
"data1":19.77,
"data2":-0.9609375,
"data3":-0.2734375,
"id":17231,
"date":"2021-05-14/08:38:47.721"
}
],
"object2":[
{
"data1":19.91,
"data2":-0.9765625,
"data3":-0.109375,
"id":18996,
"date":"2021-05-14/08:38:47.681"
},
{
"data1":19.91,
"data2":-0.9765625,
"data3":-0.109375,
"id":18996,
"date":"2021-05-14/08:38:47.806"
},
{
"data1":19.91,
"data2":-1,
"data3":-0.1171875,
"id":18996,
"date":"2021-05-14/08:38:47.931"
},
{
"data1":19.91,
"data2":-0.96875,
"data3":-0.1015625,
"id":18997,
"date":"2021-05-14/08:38:48.051"
},
{
"data1":19.91,
"data2":-0.96875,
"data3":-0.1015625,
"id":18997,
"date":"2021-05-14/08:38:48.059"
},
{
"data1":19.91,
"data2":-0.9765625,
"data3":-0.109375,
"id":18997,
"date":"2021-05-14/08:38:48.176"
}
]
}
我一直在尝试将其上传到 Firebase,但没有成功,尝试在 Firestore 中遵循此架构:
Objects
├───Object1
│ ├───[Upload Timestamp]
│ │ └───Data Array 1
│ ├───[Upload Timestamp]
│ │ └───Data Array 2
│ └───[Upload Timestamp]
│ └───Data Array 3
└───Object2
├───[Upload Timestamp]
│ └───Data Array 1
├───[Upload Timestamp]
│ └───Data Array 2
├───[Upload Timestamp]
│ └───Data Array 3
├───[Upload Timestamp]
│ └───Data Array 4
├───[Upload Timestamp]
│ └───Data Array 5
└───[Upload Timestamp]
└───Data Array 6
我尝试使用嵌套的 For 循环、字典等来做到这一点,但没有成功。到目前为止,我只能将每个对象的最后一个 Data Array 上传到 Firestore。
有什么方法可以将它正确上传到 Firestore 吗?
编辑:添加有关我的代码的更多信息
我有什么:
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
import json
from itertools import groupby
import datetime
from datetime import date
today = date.today()
d1 = today.strftime("%d.%m.%Y")
json_file_path = "./myfile.json"
with open(json_file_path, 'r') as j:
contents = json.loads(j.read())
data = {}
#Sorting my json file
for key, items in groupby(sorted(contents, key = lambda x: (x['id'], x['date'])), key=lambda x: x['id']):
data[key] = list(items)
cred = credentials.Certificate("myAppCreds.json")
firebase_admin.initialize_app(cred, {
'projectId': "MyProjectID",
})
db = firestore.client()
for keys in data:
doc_ref = db.collection('Objects').document(keys).collection(d1).document(str(datetime.datetime.now()))
for info in data[keys]:
doc_ref.set(keys)
会发生什么:
在 Firestore 中创建了以下条目:
Objects/object1/19.05.2021/2021-05-19 13:26:03.933868
文档“2021-05-19 13:26:03.933868”会不断更新新值,而不是为每个新值创建一个新值。
object2 也是如此
【问题讨论】:
-
您的时间戳对于对象数组中的每条记录都是唯一的,因此每个
[Upload Timestamp]下只有一个叶子。 -
你是对的,我编辑了这个问题。谢谢。
-
我不熟悉界面,但我已经设法使用您的对象架构在管理员上创建了一个对象。我将如何测试上传?
-
基本上你需要在每个
object节点内定义一个地图数组。 -
请使用无效的上传代码编辑您的问题。
标签: python json python-3.x google-cloud-firestore firebase-admin