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üsselWerteOhne AngabeWirkung
ansichttabs, tabellekeineDarstellung. Ohne diesen Schlüssel zeigt das Feld „keine Felder konfiguriert“
labelsListe von ZeichenkettenleerDie verfügbaren Einträge. Fehlt die Liste und ist creatable aus, gibt es keine Label-Ebene
creatabletrue, falsefalseEigene Labels anlegen, umbenennen, entfernen
alleSichtbartrue, falsetrueZeigt alle konfigurierten Labels, auch leere. false: nur befüllte, die übrigen über das Plus
maxZahl oder null1Einträge je Label. null heißt beliebig viele
felderListeleerDie Unterfelder, für alle Labels gleich
ausgabeObjekt oder ListeleerAusgabe-Formatter, siehe unten

Ältere Felder tragen createable; das wird weiter gelesen.

alleSichtbar: false im JSON eintragen

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üsselOhne AngabeBedeutung
keySchlüssel im gespeicherten Wert
labelwie keyBeschriftung bzw. Spaltenkopf
typtexttext, mehrzeilig, zahl, datum, auswahl, schalter
werteleernur auswahl: angebotene Werte
freifalsenur auswahl: Freitext mit Vorschlägen statt fester Liste
breiteautomatischBreite der Tabellenspalte, etwa 6rem
pflichtfalseLeer erzeugt einen Hinweis. Sperrt nie
platzhalterleerPlatzhaltertext

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:

KonfigurationGespeichertZugriff
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 Rumpfim eintrag-Rumpfim gesamt-Rumpf
wertdas Label des Eintragsder Rohwert des Feldes
subdie Werte des Eintragsdie Unterfelder des Feldes
zeilendieser Eintrag als Listealle Einträge, jeder zusätzlich mit formatiert und __label
cfg('key')die eigene Konfigurationdieselbe
meta('key')Anmerkungen des Datenfeldes: Quelle, Kommentar, Farbe, unsicher, Modifierdieselbe
leer, spalte, verbinde, tab, maskeHilfendieselben

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.

\ en\ de