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-parser , eine leichte und anpassbare Bibliothek zum Parsen teilweise JSON-Saiten. Hier ist eine Demo.
(Beachten Sie, dass es auch eine JavaScript -Implementierung gibt)
pip install partial-json-parser # or poetry / pdm / uv partial-json-parser ist nur in Python mit guten Typen implementiert. Es ist Null-Abhängigkeit und funktioniert mit Python 3.6+.
Sie können seinen Demo -Spielplatz ausführen, indem Sie auch rich installieren oder:
pip install partial-json-parser[playground] Laufen Sie dann den json-playground in Ihrem Terminal und Sie können den Parser interaktiv ausprobieren.
from partial_json_parser import loads
> >> loads ( '{"key": "v' ) # {'key': 'v'} Alternativ können Sie ensure_json , dass Sie die abgeschlossene JSON -Zeichenfolge erhalten:
from partial_json_parser import ensure_json
> >> ensure_json ( '{"key": "v' ) # '{"key": "v"}' Sie können die loads und das Allow aus der Bibliothek wie folgt importieren:
from partial_json_parser import loads , Allow 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 loads Funktion funktioniert genauso wie das integrierte json.loads , wenn eine vollständige JSON-Zeichenfolge analysiert wird:
result = loads ( '{"key":"value"}' )
print ( result ) # Outputs: {'key': 'value'} Sie können eine partielle JSON -Zeichenfolge analysieren, indem Sie einen zusätzlichen Parameter an die loads übergeben. Dieser Parameter ist bitweise oder der Konstanten aus der FLAGE Allow :
(Beachten Sie, dass Sie die Konstanten, die Sie benötigen, direkt von partial-json-parser importieren können.)
from partial_json_parser import loads , Allow , STR , OBJ
result = loads ( '{"key": "v' , STR | OBJ )
print ( 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 Diktat. 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 = loads ( '{"key": "v' , OBJ )
print ( result ) # Outputs: {}
result = loads ( '{"key": "value"' , OBJ )
print ( result ) # Outputs: {'key': 'value'}Ähnlichkeit können Sie Teillisten oder sogar teilweise spezielle Werte analysieren, wenn Sie dies zulassen:
(Beachten Sie, dass Standardeinstellungen Allow.ALL allow
result = loads ( '[ {"key1": "value1", "key2": [ "value2' )
print ( result ) # Outputs: [{'key1': 'value1', 'key2': ['value2']}]
result = loads ( "-Inf" )
print ( result ) # Outputs: -inf Wenn die JSON -Zeichenfolge missgebildet ist, wirft die parse -Funktion einen Fehler auf:
loads ( "wrong" ) # MalformedJSON: Malformed node or string on line 1 json_string <string> : Die (unvollständige) JSON -Zeichenfolge, die analysiert werden muss.allow_partial <Allow | int> : Geben Sie an, welche Art von Teilheit während des JSON -Parsens zulässig ist (Standard: Allow.ALL ).parser (str) -> JSON : Ein gewöhnlicher JSON -Parser. Standard ist json.loads . Vervollständigen Sie die JSON -Zeichenfolge und analysieren Sie sie mit parser -Funktion.
Gibt den analysierten Python -Wert zurück.
Alias: decode , parse_json .
json_string <string> : Die (unvollständige) JSON -Zeichenfolge, die zu vervollständigen ist.allow_partial <Allow | int> : Geben Sie an, welche Art von Teilheit während des JSON -Parsens zulässig ist (Standard: Allow.ALL ).Gibt die abgeschlossene JSON -String zurück.
json_string <string> : Die (unvollständige) JSON -Zeichenfolge, die zu vervollständigen ist.allow_partial <Allow | int> : Geben Sie an, welche Art von Teilheit während des JSON -Parsens zulässig ist (Standard: Allow.ALL ).Gibt ein Tupel einer Scheibe der Eingangszeichenfolge und der Fertigstellung zurück.
Beachten Sie, dass dies eine API auf niedriger Ebene ist, die nur zum Debuggen und Demonstrationen nützlich ist.
Enum -Klasse, die angibt, welche Art von Teilheit während der JSON -Parsen zulässig ist. Es hat die folgenden Mitglieder:
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.git
cd partial-json-parser
pdm installDann können Sie die Tests mit Hypothese und PyTest ausführen:
pdm testBitte 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.