Senden/Parsing mehrere JSON-Objekte
Ich habe einen Sinatra-server ist wieder in mehrere JSON-Objekte aus der Datenbank in ein streaming-Weise. Die Objekte würde wie folgt Aussehen:
{"a": 1, "b": 2, "c": 3}
{"a": 4, "b": 5, "c": 6}
...
aber das ist ungültiges JSON. Ich kann nur hinzufügen, ein hack in Sinatra ' s event processing (manuell injizieren der fehlenden array-Trennzeichen), um die Reaktion Aussehen:
[
{"a": 1, "b": 2, "c": 3}
, {"a": 4, "b": 5, "c": 6}
]
gültigen JSON-nun, aber diese Technik ist unelegant. Gibt es eine Möglichkeit, dies zu tun client-Seite? Im Grunde, was ich will, ist eine JavaScript-Funktion liest einen string ein und verbrauchen Sie ein gültiges JSON-Objekt, und klicken Sie dann zurück, um mir das JSON-Objekt und den Rest der Zeichenfolge, die iterativ aufgerufen wird, bis der gesamte string ist verbraucht.
InformationsquelleAutor der Frage Kenny Peng | 2010-11-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die native
JSON.parse()
Funktion erwarten, dass der ganze string gültiges JSON. Ich bin mir nicht bewusst, einen parser, der verbraucht nur die erste gültige Objektwie Sie möchten. Und sollten die Menschen wirklich zu produzieren, gültige JSON sowieso.Wenn Sie wissen, dass es ein Objekt pro Zeile können Sie einfach teilen Sie die Zeichenfolge Linie, die mit den
split()
Funktion und analysieren Sie jede Zeile einzeln.Konnte man auch mit ein wenig string-manipulation zu verwandeln, jede Zeile in ein array-element und analysieren das ganze.
InformationsquelleAutor der Antwort Alex Jasmin
Wenn der JSON-strings sind eine einzige Linie, die Sie tun können, so etwas wie dieses:
Wenn nicht, Ignoriere meine Antwort.
Ich hoffe, dies hilft Ihnen,
Alin
Hinweis: ich habe versucht, zu erfüllen die Anforderung
dies ist der Grund, warum ich nicht verwenden
.split("\n")
.InformationsquelleAutor der Antwort Alin Purcaru
Ich würde dies tun:
InformationsquelleAutor der Antwort Chris
o.string json-Objekt.
fügen Sie einen string wie "neu", um ein array von Objekten oder mehrere json-Objekte.
zB:
hoffen, dass dies zu analysieren, mehrere json-Objekte .
InformationsquelleAutor der Antwort Kishore Ganti
Dies ist vielleicht nicht die effizienteste, aber sollte den job zu erledigen.
Wenn Sie wissen, dass es ein neue-Zeile-Zeichen zwischen Objekten, wird es viel einfacher.
InformationsquelleAutor der Antwort roto
Wenn der Datenstrom ist, geben Sie mehrere JSON-Objekte in einer Zeile, die Sie brauchen, um Sie zu trennen und in ein array:
InformationsquelleAutor der Antwort YodasWs
Schrieb ich ein kleines Modul, heute dies zu tun, und veröffentlicht es auf NPM als
json-multi-parse
. Die code ist verfügbar auf Github.Meine Lösung ist zwar einfach, aber zugegebenermaßen möglicherweise spröde, da Sie sich auf die Fehlermeldung
JSON.parse
wirft bei der Analyse solcher string. Es verwendet die Setzung Nummer gegeben, die in der Fehlermeldung (die Zahl in der "Unexpected token { in JSON an position xyz") zu analysieren, alles bis zu vor, dass dann rekursiv durchsuchen und analysieren alles nach.Jedoch, es wird nicht brechen, durch geschweifte Klammern in strings, wie einige der anderen Anregung Lösungen hier.
Hier ist die einfache version des Codes, die Arbeit wird in Verchromt und Knoten.
Es wird komplizierter, wenn Sie möchten, unterstützt auch Mozilla Firefox gibt, die Ihren Fehler in einem format, Angabe der Zeilennummer und Zeichen innerhalb der Zeile. Das Modul habe ich oben verlinkten Griffe diesem Fall.
InformationsquelleAutor der Antwort tremby