Manchmal brauchen wir LLM (Großsprachenmodelle), um strukturelle Informationen anstelle einer natürlichen Sprache zu erstellen. Der einfachste Weg ist, JSON zu verwenden.
Bevor jedoch das letzte Zeichen der Antwort erhalten wird, ist der JSON gebrochen, was bedeutet, dass Sie JSON.parse
nicht verwenden können, um ihn zu entschlüsseln. Wir möchten jedoch immer noch die Daten an den Benutzer streamen.
Hier kommt partial-json
, eine leichte und anpassbare Bibliothek zum Analysieren von teilweise JSON-Zeichenfolgen. Hier ist eine Demo.
(Beachten Sie, dass es auch eine Python -Implementierung gibt)
npm i partial-json # or pnpm / bun / yarn
partial-json
ist nur in JavaScript implementiert und verfügt sowohl aus commonjs
als auch esm
Builds.
Sie können die parse
-Funktion und das Allow
aus der Bibliothek wie folgt importieren:
import { parse , Allow } from "partial-json" ;
Das Objekt Allow
ist nur eine Aufzählung für Optionen. Es bestimmt, welche Typen teilweise sein können. Die Typen, die nicht in allow
enthalten sind, erscheint nur nach Abschluss der Fertigstellung.
Die parse
Funktion funktioniert genauso wie der integrierte JSON.parse
wenn Sie eine vollständige JSON-Zeichenfolge analysieren:
let result = parse ( '{"key":"value"}' ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
Sie können eine partielle JSON -Zeichenfolge analysieren, indem Sie einen zusätzlichen Parameter an die parse
-Funktion übergeben. Dieser Parameter ist bitweise oder von den Konstanten aus dem Objekt Allow
:
(Beachten Sie, dass Sie die Konstanten, die Sie benötigen, direkt von partial-json
importieren können.)
import { parse , STR , OBJ } from "partial-json" ;
result = parse ( '{"key": "v' , STR | OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'v' }
In diesem Beispiel teilt sich Allow.STR
dem Parser mit, dass es in Ordnung ist, wenn eine Zeichenfolge unvollständig ist, und Allow.OBJ
dem Parser so wie ein Objekt. Der Parser versucht dann, so viele Daten wie möglich zurückzugeben.
Wenn Sie keine teilweisen Zeichenfolgen zulassen, fügt es dem Objekt keine "key"
hinzu, da "v
nicht in der Nähe ist:
result = parse ( '{"key": "v' , OBJ ) ;
console . log ( result ) ; // Outputs: {}
result = parse ( '{"key": "value"' , OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
Ähnlichkeit können Sie Teilarrays oder sogar teilweise spezielle Werte analysieren, wenn Sie dies zulassen:
(Beachten Sie, dass Allow.ALL
allow
)
result = parse ( '[ {"key1": "value1", "key2": [ "value2' ) ;
console . log ( result ) ; // Outputs: [ { key1: 'value1', key2: [ 'value2' ] } ]
result = parse ( "-Inf" ) ;
console . log ( result ) ; // Outputs: -Infinity
Wenn die JSON -Zeichenfolge missgebildet ist, wirft die parse
-Funktion einen Fehler auf:
parse ( "wrong" ) ; // MalformedJSON [Error]: SyntaxError: Unexpected token 'w', "wrong" is not valid JSON at position 0
jsonString
<string>
: Die JSON -String, die analysiert werden muss.allowPartial
<number>
: Geben Sie an, welche Art von Teilheit während des JSON -Parsens zulässig ist (Standard: Allow.ALL
).Gibt den analysierten JavaScript -Wert zurück.
Ein Objekt, das angibt, welche Art von Teilheit während der JSON -Parsen zulässig ist. Es hat die folgenden Eigenschaften:
STR
: Partielle Zeichenfolge zulassen.NUM
: Teilnummer zulassen.ARR
: Teilarray zulassen.OBJ
: Ein Teilobjekt zulassen.NULL
: Ermöglichen Sie teilweise Null.BOOL
: teilweise boolean zulassen.NAN
: Teilweise Nan.INFINITY
: teilweise Unendlichkeit zulassen._INFINITY
: partiell -infinity zulassen.INF
: Ermöglichen Sie sowohl teilweise Unendlichkeit als auch -Imbinität.SPECIAL
: Erlauben Sie allen besonderen Werten.ATOM
: Erlauben Sie alle Atomwerte.COLLECTION
: Erlauben Sie allen Sammelwerten.ALL
: Erlauben Sie alle Werte. Um die Tests für diese Bibliothek auszuführen, sollten Sie das Repository klonen und die Abhängigkeiten installieren:
git clone https://github.com/promplate/partial-json-parser-js.git
cd partial-json-parser-js
npm i
Dann können Sie die Tests mit Vitest ausführen:
npm run test
Bitte beachten Sie, dass es zwar bemüht ist, so viele Kantenfälle wie möglich abzudecken, es immer möglich ist, dass einige Fälle möglicherweise nicht abgedeckt werden.
Dieses Projekt ist unter der MIT -Lizenz lizenziert.