Feldarten
JSON
Feldart JSON. Eine Liste von Einträgen, jeder mit einem Label und denselben Unterfeldern. Die Eingabe
aus Sicht der Erfassung beschreibt JSON .
Das Modell
Ein JSON-Feld hat Unterfelder (felder, die Spalten) und optional Labels (labels, die
Einträge). ansicht entscheidet nur über die Darstellung als Reiter oder Tabelle; ein Umstellen bewegt
keine Daten.
JSON{ "ansicht": "tabs", "labels": ["Objekt", "Rahmen"], "creatable": true, "max": 1, "felder": [ { "key": "hoehe", "label": "Höhe", "typ": "zahl" }, { "key": "breite", "label": "Breite", "typ": "zahl" }, { "key": "tiefe", "label": "Tiefe", "typ": "zahl" } ] }
Parameter
| Schlüssel | Werte | Ohne Angabe | Wirkung |
|---|---|---|---|
ansicht | tabs, tabelle | keine | Darstellung. Ohne diesen Schlüssel zeigt das Feld „keine Felder konfiguriert“ |
labels | Liste von Zeichenketten | leer | Die verfügbaren Einträge. Fehlt die Liste und ist creatable aus, gibt es keine Label-Ebene |
creatable | true, false | false | Eigene Labels anlegen, umbenennen, entfernen |
alleSichtbar | true, false | true | Zeigt alle konfigurierten Labels, auch leere. false: nur befüllte, die übrigen über das Plus |
max | Zahl oder null | 1 | Einträge je Label. null heißt beliebig viele |
felder | Liste | leer | Die Unterfelder, für alle Labels gleich |
ausgabe | Objekt oder Liste | leer | Ausgabe-Formatter, siehe unten |
Ältere Felder tragen createable; das wird weiter gelesen.
Das Formular unter Parameter nimmt für alleSichtbar die Vorgabe false an und lässt den Schlüssel
weg, wenn man diesen Wert wählt. Ohne Schlüssel zeigt das Feld aber alle Labels. Wer nur befüllte Labels
zeigen will, trägt "alleSichtbar": false unter Alle Parameter als JSON ein.
Das Label ist zugleich der Schlüssel im gespeicherten Wert. Wer ein Label in der Konfiguration umbenennt, lässt die alten Daten unter dem alten Label liegen. Sie bleiben sichtbar und werden als nicht konfiguriert markiert; der Umzug ist Handarbeit.
Unterfelder
| Schlüssel | Ohne Angabe | Bedeutung |
|---|---|---|
key | Schlüssel im gespeicherten Wert | |
label | wie key | Beschriftung bzw. Spaltenkopf |
typ | text | text, mehrzeilig, zahl, datum, auswahl, schalter |
werte | leer | nur auswahl: angebotene Werte |
frei | false | nur auswahl: Freitext mit Vorschlägen statt fester Liste |
breite | automatisch | Breite der Tabellenspalte, etwa 6rem |
pflicht | false | Leer erzeugt einen Hinweis. Sperrt nie |
platzhalter | leer | Platzhaltertext |
Kurzform: "felder": ["hoehe", "breite"] ergibt Textfelder mit Schlüssel gleich Beschriftung.
Ein datum-Unterfeld zeigt die Datumsauswahl, solange der Wert leer oder ISO ist; ein bestehendes 14.02.2026 bleibt ein Textfeld. Ein auswahl-Wert außerhalb der Liste wird ergänzt statt verworfen.
Was gespeichert wird
Die Form klappt zusammen, sobald die Konfiguration das erlaubt:
| Konfiguration | Gespeichert | Zugriff |
|---|---|---|
Labels, max: 1, ein Unterfeld | {"de": "Bildnis einer Dame"} | Titel.de |
Labels, max: 1, mehrere | {"Objekt": {"hoehe": "118,5", "breite": "64"}} | Maße.Objekt.breite |
Labels, max größer 1 oder null | {"Objekt": [{…}, {…}]} | Maße.Objekt[0].breite |
| ohne Labels, ein Unterfeld | ["INV 2019/0412", "INV 2019/0413"] | Inv[0] |
| ohne Labels, mehrere | [{"hoehe": "118,5"}, …] | Inv[0].hoehe |
Wer max oder die Zahl der Unterfelder ändert, schreibt ab dann eine andere Form, als die vorhandenen
Daten haben. Gelesen wird jede Form. Eingaben werden als Zeichenketten geschrieben ("1" statt 1), weil 118,5 ohnehin keine JSON-Zahl ist. Ein nie befülltes Feld ist eine leere Zeichenkette und gilt überall
als leer. Unterfeld-Schlüssel, die die Konfiguration nicht kennt, bleiben erhalten.
Ausgabe-Formatter
Ein ausgabe-Block macht im Export die Variante „Formatiert“ verfügbar, in Galerie, Tabelle und Kanban
ebenso. Er hat zwei Rümpfe:
JSON{ "ausgabe": { "eintrag": { "js": "return sub['hoehe'] + ' × ' + sub['breite'] + ' cm';" }, "gesamt": { "js": "return verbinde(zeilen, '{__label}: {formatiert}', '; ');" }, "label": "Maße kurz" } }
eintrag formatiert einen Eintrag (118,5 × 64 cm), gesamt das ganze Feld (Objekt: 118,5 × 64 cm; Rahmen: 130 × 75 cm). Fehlt gesamt, werden die Eintragsergebnisse mit ; verbunden. label beschriftet die Formatierung in Auswahl und Spaltenkopf.
Mehrere Formatierungen stehen als Liste mit je einer Kennung name. Die Variante standard ist die, die
der schlichte Feldname adressiert; die übrigen heißen in Vorlagen Maße#kurz.
| Name im Rumpf | im eintrag-Rumpf | im gesamt-Rumpf |
|---|---|---|
wert | das Label des Eintrags | der Rohwert des Feldes |
sub | die Werte des Eintrags | die Unterfelder des Feldes |
zeilen | dieser Eintrag als Liste | alle Einträge, jeder zusätzlich mit formatiert und __label |
cfg('key') | die eigene Konfiguration | dieselbe |
meta('key') | Anmerkungen des Datenfeldes: Quelle, Kommentar, Farbe, unsicher, Modifier | dieselbe |
leer, spalte, verbinde, tab, maske | Hilfen | dieselben |
Ein Formatter sieht nur sein eigenes Feld. Wer über mehrere Felder rechnet, nimmt ein virtuelles Feld ; es kann über fmt('Maße') den
fertigen Formatter eines JSON-Feldes abrufen.
Die Feldart selbst bringt die Formatierung Einträge einzeilig mit. Wie Vorgaben der Feldart und eigene Formatierungen zusammenwirken und welcher Sprachumfang im Rumpf erlaubt ist, steht unter Formatierungen .
Standards und Import
Ein JSON-Feld kann ein wiederholbares Konzept eines Metadaten-Standards bedienen, je Eintrag eine
Instanz. Die Pseudospalte __label bindet dabei die Sprache eines Titels oder den Bezug eines Maßes.
Siehe Metadaten-Standards .
Beim Excel-Import nimmt ein JSON-Feld ein vollständiges Dokument an, eine Spaltenregel (Trennzeichen
wie in 118,5 × 64 × 21 oder ein Muster mit benannten Gruppen) oder einen Wert unter einem gewählten
Label. Alles andere wird geparkt. Siehe Excel-Import .
Beispiele
Dreisprachiger Titel:
JSON{ "ansicht": "tabs", "labels": ["de", "en", "es"], "creatable": true, "max": 1, "felder": [{ "key": "titel", "label": "Titel", "typ": "text" }], "ausgabe": { "gesamt": { "js": "return verbinde(zeilen, '{__label}: {titel}', '; ');" }, "label": "Alle Sprachen" } }
Maße mit Bezug, wiederholbar:
JSON{ "ansicht": "tabelle", "labels": ["Objekt", "Rahmen", "Passepartout"], "creatable": true, "alleSichtbar": false, "max": null, "felder": [ { "key": "art", "label": "Art", "typ": "auswahl", "frei": true, "werte": ["Höhe", "Breite", "Tiefe", "Gewicht"], "breite": "7rem" }, { "key": "wert", "label": "Wert", "typ": "zahl", "pflicht": true, "breite": "5rem" }, { "key": "einheit", "label": "Einheit", "typ": "auswahl", "frei": true, "werte": ["cm", "mm", "m", "g", "kg"], "breite": "4.5rem" } ], "ausgabe": { "eintrag": { "js": "return sub['art'] + ' ' + sub['wert'] + ' ' + sub['einheit'];" }, "gesamt": { "js": "return verbinde(zeilen, '{__label}: {formatiert}', '; ');" } } }
Inventarnummern ohne Label:
JSON{ "ansicht": "tabelle", "max": null, "felder": [{ "key": "nr", "label": "Nummer" }] }
Wann eine andere Feldart passt
Sobald nach einem der Werte gesucht, sortiert oder gruppiert wird, gehört er in ein eigenes Feld. Für ein Konstrukt, das keine Liste gleichförmiger Einträge ist, gibt es JSON-Schema . Für einen einzelnen Wert lohnt die Struktur nicht.