Hinzufügen von FB Daten, Punkte und Schrägstriche
Ich versuche es mal mit FB db,
Ich fand sehr wichtig, die Einschränkungen, die nicht beschrieben sind in der FB-Hilfe oder FAQ.
Erste problem ist, dass symbol: Punkt ( ' . ' verboten Tasten,
d.h. FB ablehnen (mit unbekanntem Grund) weiter:
nameRef.child('[email protected]').set('Pirat');
Zweite problem mit der Schrägstriche in Ihrer keys '/',
wenn Sie versuchen, Sie auf Schlüssel hinzufügen, wie dies
{'02/10/2013': true}
In der Feuerstellung Sie unter:
'02': {
'10': {
'2013': true
}
}
Hast du eine Idee wie es zu lösen (automatisch)?
Möglicherweise werden einige fahne, es ist die string-Schlüssel, mit allen Symbolen?
Natürlich kann ich analysieren/Daten wiederherstellen jedes mal vor dem schreiben und nach dem Lesen, aber...
Durch die Art und Weise '.' '/' - alle eingeschränkten Symbole für FB ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund, dass das hinzufügen von ein Kind
02/10/2013
schafft eine Struktur, in der Feuerstellung ist, weil die Schrägstriche sind, was die Schaffung einer neuen Ebene.So, dass die Linie, die ich davon ausgegangen, dass Sie etwas ähnliches wie:
firebaseRef.child('02/10/2013').set(true)
entsprichtfirebaseRef.child('02').child('10').child('2013').set(true)
.Zu vermeiden, dass die Probleme nicht in der Lage, verwenden Sie die folgenden Zeichen in der Referenz-Schlüssel-Namen (Quelle),
können wir eine JavaScript-built-in encoding-Funktionen da, soweit ich kann sagen, FB hat nicht bieten eine eingebaute Methode, dies zu tun. Hier ist ein Durchgang zu sehen, welche ist die effektivste für unsere Zwecke:
Offenbar die effektivste Lösung ist
encodeURIComponent
. Jedoch, löst es nicht alle unsere Probleme. Die.
Charakter immer noch ein problem darstellt, wie dargestellt durch die obigen Tests und versuchenencodeURIComponent
Ihre test-e-mail-Adresse. Mein Vorschlag wäre, eine Kette ersetzen-Funktion nach derencodeURIComponent
auf den Umgang mit den Zeiten.Hier ist, was die Lösung Aussehen würde, und für deine beiden Beispiel-Fällen:
Da sowohl die endgültigen Ergebnisse sind sicher für die Aufnahme in eine Feuerstellung als Namen für den Schlüssel ein, die nur andere betreffen, ist die Dekodierung nach dem Lesen aus einer Feuerstellung, die gelöst werden können, mit
replace('%2E', '.')
und eine einfachedecodeURIComponent(...)
.requests.exceptions.HTTPError: 400 Client Error: Bad Request
Ausnahme. Am besten vermeiden Sie die Verwendung dieser Zeichen im Schlüsselurllib.quote
)Ich Stand vor dem gleichen problem zu mir, und ich erstellt haben FB codieren für diesen Zweck.
Im Gegensatz zu der gewählten Antwort, FB codieren kodiert nur unsichere Zeichen (./[]#$) und % (notwendig aufgrund von, wie das encoding/decoding funktioniert).
Es lässt auch andere Sonderzeichen, die sicher als FB-Taste, während
encodeURIComponent
wird Kodieren.Hier ist der Quellcode für details:
Charakter Einschränkungen sind dokumentiert bei https://www.firebase.com/docs/creating-references.html - Sie können nicht mit '.', '/', '[', ']', '#', und '$' im Namen. Es gibt keine automatische Möglichkeit der Maskierung dieser Zeichen, ich würde empfehlen, die Vermeidung von Ihrer Nutzung ganz oder erstellen Sie Ihre eigene Flucht/unescaping Mechanismus.
Ich schrieb dies für Java (da kam ich hier erwartet Sie eine java-Implementierung):
Wenn Sie Swift 3, das funktioniert für mich (versuchen Sie es in ein Spielplatz):
Ich verärgert mit diesem problem, also ich fand die Antwort von @sushain97 (danke!) und baute eine Tiefe encoder/decoder.
https://www.npmjs.com/package/firebase-key-encode
Grundlegende Verwendung:
Tief Nutzung:
Sehe ich nicht eine "Automatik" eingebaut in FB-encoder für Schlüssel.
Hier ist ein Java-Lösung.
Habe ich diese Seite gebaut, eine vereinfachte version von josue.0 Antwort, aber ich denke, es ist besser code, der seit seiner version könnte zu Problemen führen. Eine Menge Leute werden _P oder _D in Ihren code, so muss es sein, mehr komplexer und unwahrscheinlich.
Persönlich habe ich eine einfache und einfache hack für das gleiche problem, das ich gestoßen
Nahm ich die
dateTime string
auf und wandeln es mithilfe vonreplace('/','|')
das Ergebnis wird so etwas wie dieses
2017|07|24 02:39:37
statt2017/07/24 02:39:37
.