Fehlende Felder und Nullfelder sind zwei verschiedene Fehler.
„Feld nicht gefunden“ und „Feld ist ein Nullwert“ erscheinen möglicherweise beide leer auf der Benutzeroberfläche, sollten aber nach dem Aufrufen des Programms nicht verwechselt werden. Füllen Sie dann die Lücken mit der Zahl Null aus, und das Problem wird subtiler: Der Downstream erhält einen zulässigen Wert, denkt aber, dass er aus dem Originaltext stammt.
– „required"steuert, ob der Schlüssel vorhanden ist, und „type"steuert den Werttyp. Nur das Schreiben erforderlich verbietet nicht null. – Das Beispiel verwendet fünf Eingabesätze für die Regressionsprüfung. Fehlende Schlüssel, Zeichenfolgenwerte und redundante Schlüssel werden alle als illegal beurteilt.
- Bei fehlenden Gründen können Sie ein separates Status- oder Grundfeld festlegen, anstatt es in die Betragszeichenfolge zu stopfen.
Wenn das Feld nicht gefunden wird oder das Feld einen Nullwert hat, wird möglicherweise nur ein Leerzeichen auf der Schnittstelle angezeigt, die Bedeutung ist jedoch nach dem Aufrufen des Programms völlig anders. Wenn Sie die Lücke mit der Zahl Null füllen, erhält der Downstream einen zulässigen Wert, aber Sie glauben fälschlicherweise, dass er aus dem Originaltext stammt, und das Problem wird schwerer zu finden sein.
Dieser Artikel richtet sich an Entwickler und Dokumentaristen, die die Extraktionsergebnisse zur Verarbeitung an Programme übergeben müssen. Es erklärt, wie man JSON-Schema verwendet, um drei Zustände zu unterscheiden und mehrere Eingabebeispiele für Regressionsprüfungen zu verwenden. Nachdem Sie dies gelesen haben, können Sie die Grenzen für fehlende, Null- und Nullwerte für Ihr eigenes Datenprotokoll festlegen.
Bei den Beispielen in diesem Artikel handelt es sich um synthetische Daten, und der Code wurde anhand des Beispiels in einer isolierten Umgebung überprüft. Dies stellt jedoch keine Garantie für alle tatsächlichen Dateien oder Produkteffekte dar. Bevor Sie wichtige Dokumente bearbeiten, bewahren Sie bitte die Originale auf und überprüfen Sie sie anhand der Grenzen und Akzeptanzpunkte im Text.
Fazit in einem Satz
Das Feld fehlt, der Wert istnull und der Wert ist 0. Es sollte drei verschiedene Zustände geben. Der Vertrag muss die Existenz des Schlüssels und des Werttyps nutzen, um sie zu trennen. Es kann nicht auf Schnittstellen- oder nachgelagerten Schätzungen beruhen.
| Ihre Situation | Empfohlene Praktiken | Grund |
|---|---|---|
| Es muss bestätigt werden, ob die Ausgabestruktur vollständig ist | Überprüfen Sie mit required, ob der Schlüssel vorhanden ist | Fehlende Schlüssel weisen darauf hin, dass die Ausgabestruktur unvollständig ist und nicht einem Betrag von Null entspricht. |
| Im Originalartikel ist kein Betrag verfügbar | Stellen Sie den Wert auf null ein | null bedeutet, dass kein verfügbarer Wert erhalten wird und nicht mit 0 gefüllt werden sollte |
| Der Originaltext gibt explizit Null an | Verwenden Sie den Wert 0 | Null ist im Gegensatz zu fehlenden Werten und Nullwerten ein eindeutiger Wert |
| Es muss der Grund für die Nichtextraktion erläutert werden | Fügen Sie ein zusätzliches status- oder reason-Feld hinzu und definieren Sie zulässige Werte | Vermeiden Sie es, den Grund in die Mengenzeichenfolge einzutragen, um die nachgelagerte Demontage zu reduzieren |
Trennen Sie zunächst die drei Zustände
Im Kompositionsvertrag dieses Artikels muss amount vorhanden sein, numerische Werte oder null sind zulässig. Die Bedeutung der drei Zustände ist wie folgt:
- Kein
amount-Schlüssel: Die Ausgabestruktur ist unvollständig und eine Vertragsausnahme. amountfürnull: Der Schlüssel existiert, aber derzeit ist kein Betrag verfügbar.amountist 0: Es liegt ein eindeutiger Nullwert vor.
Andere Protokolle können für echte Geschäfte verwendet werden, sie müssen jedoch klar formuliert sein und dürfen nicht jedem Anrufer überlassen werden.
required des JSON-Schemas ist für die Prüfung verantwortlich, ob der Schlüssel vorhanden ist, und type ist für die Prüfung des Typs des Werts verantwortlich. Zwei häufige Missverständnisse erfordern besondere Aufmerksamkeit:
- Das bloße Schreiben von
requireddeaktiviertnullnicht automatisch. - Nur das Feld ist in
propertiesdefiniert und muss nicht angezeigt werden.
Beide Punkte eignen sich zum direkten Schreiben in Regressionstests. Die vollständige Definition von Objekten und required finden Sie unter JSON-Schemaobjekte und erforderlich.
Überprüfen Sie den Vertrag mit vier Eingaben
from jsonschema import Draft202012Validator
schema = {"type": "object", "required": ["amount"],
"properties": {"amount": {"type": ["number", "null"]}},
"additionalProperties": False}
validator = Draft202012Validator(schema)
valid = lambda value: not list(validator.iter_errors(value))
assert valid({"amount": None})
assert valid({"amount": 0})
assert not valid({})
assert not valid({"amount": "unknown"})
assert not valid({"amount": None, "guessed": True})
jsonschema muss vor der Ausführung installiert werden. Dieser Code führt nur eine Strukturprüfung im Speicher durch, ruft nicht das Extraktionsmodell auf und kann nicht nachweisen, dass eine bestimmte Menge mit dem Originaltext übereinstimmt.
Wenn der Betrag eine genaue Dezimaldarstellung erfordert, kann stattdessen das Dezimalzeichenfolgenprotokoll verwendet werden. Betrachten Sie binäre Gleitkommaberechnungen nicht nur als Finanzlösung, nur weil das Beispiel number verwendet.
Die Schnittstelle sollte den Status auch klar angeben.
Die Anzeige auf der Schnittstelle muss auch zwischen Zuständen unterscheiden können, da Benutzer andernfalls unterschiedliche Bedeutungen als dasselbe Ergebnis fehlinterpretieren.
| Daten | Der Zustand, der ausgedrückt werden soll | sollte nicht als angezeigt werden |
|---|---|---|
| Kein Betragsschlüssel | Ausgabevertragsausnahme | Betrag ist Null |
| Betrag ist null | Es wurde kein verfügbarer Wert ermittelt | Extraktion erfolgreich |
| Betrag ist 0 | hat einen eindeutigen Nullwert | Fehlen |
| Betrag ist eine unbekannte Zeichenfolge | Nicht in Übereinstimmung mit diesem Vertrag | Wird automatisch in Null konvertiert und stillschweigend übergeben |
Fehlende Gründe nicht in numerische Felder einfügen
Wenn Sie zwischen „Originaltext nicht bereitgestellt", „Bild nicht lesbar", „Kandidatenkonflikt"usw. unterscheiden müssen, können Sie ein zusätzliches Feldstatus oder reason hinzufügen und zulässige Werte dafür definieren.
Schreiben Sie den Grund nicht in eine Betragszeichenfolge und lassen Sie dann den Downstream die Zahlen daraus ziehen. „Unbekannt"ist nicht dasselbe wie „Fehler": Einige Dokumente verfügen nicht über dieses Feld und das richtige Ergebnis besteht darin, es „unbekannt"zu belassen.
📊 Kernvergleich
| Zustand | Existiert der Schlüssel? | Wert | Bedeutung |
|---|---|---|---|
| Fehlen | NEIN | keiner | Die Ausgabestruktur ist unvollständig |
| Nullwert | Ja | null | Derzeit sind keine Werte verfügbar |
| Nullwert | Ja | 0 | expliziter Wert Null |
🎯 Welche Methode ist für Dich geeignet?
Wenn Sie überprüfen müssen, ob die Schnittstellenausgabe vollständig ist
Überprüfen Sie mit required, ob der Schlüssel vorhanden ist. Ein fehlender Schlüssel gilt direkt als Vertragsausnahme.
Wenn Ihr Dokument häufig ein bestimmtes Feld nicht enthält
Lassen Sie zu, dass dieser Feldwert null ist, und geben Sie als Grund status oder reason an.
Wenn der Betrag genau berechnet werden muss
Berücksichtigen Sie das Dezimalzeichenfolgenprotokoll und verlassen Sie sich nicht direkt auf binäre Gleitkommazahlen.
Wenn Sie nach der Extraktion eine Übersetzung oder Überprüfung durchführen möchten
Überprüfen Sie gemeinsam die Währung, die Herkunft und die entsprechenden Etiketten, um sicherzustellen, dass die Schlüsselnummern nicht versehentlich geändert wurden.
❓ Häufig gestellte Fragen (FAQ)
1. Wenn Sie nur „erforderlich"schreiben, bedeutet das, dass Null verboten ist?
NEIN.required prüft nur, ob der Schlüssel vorhanden ist. Die Deaktivierung von null muss separat in type definiert werden.
2. Was ist der Unterschied zwischen einem Feld mit Null und einem Feld mit 0?
null bedeutet, dass derzeit kein Wert verfügbar ist. 0 ist ein eindeutiger Wert. Beides sollte im Vertrag bzw. in der Schnittstelle vertreten sein.
3. Bedeutet legales JSON, dass das Extraktionsergebnis korrekt ist?
Heißt nicht. Die Strukturprüfung kann nur bestätigen, dass das Format dem Vertrag entspricht, nicht jedoch nachweisen, dass der Betrag mit dem Originaltext übereinstimmt.
4. Kann das Feld direkt als 0 angezeigt werden, wenn es fehlt?
Nicht empfohlen. „Fehlend"bedeutet, dass die Ausgabestruktur unvollständig ist. Das Eingeben von 0 führt dazu, dass der Downstream dies als den tatsächlichen Betrag behandelt.
📝 Zusammenfassung
Fehlende, Null- und Nullwerte haben ihre eigene Bedeutung und sollten separat durch Verträge und Schnittstellen ausgedrückt werden. Nachdem die Struktur genehmigt wurde, müssen noch die Währung, die Quelle und die entsprechende Bezeichnung des Betrags überprüft werden.


