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 (fields, die Spalten) und optional Labels (labels, die
Einträge). view entscheidet nur über die Darstellung als Reiter oder Tabelle; ein Umstellen bewegt
keine Daten.
JSON{ "view": "tabs", "labels": ["Objekt", "Rahmen"], "creatable": true, "max": 1, "fields": [ { "key": "hoehe", "label": "Höhe", "type": "number" }, { "key": "breite", "label": "Breite", "type": "number" }, { "key": "tiefe", "label": "Tiefe", "type": "number" } ] }
Parameter
| Schlüssel | Werte | Ohne Angabe | Wirkung |
|---|---|---|---|
view | tabs, table | 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 |
show_all | 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 |
fields | Liste | leer | Die Unterfelder, für alle Labels gleich |
output | Objekt oder Liste | leer | Ausgabe-Formatter, siehe unten |
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 |
type | text | text, multiline, number, date, select, switch, reference. Ein unbekannter Typ wird text |
values | leer | nur select: angebotene Werte |
free | false | nur select: Freitext mit Vorschlägen statt fester Liste |
library | keine | nur reference: normdata, address oder object, siehe Verweise |
target_project_id | das Projekt des Feldes | nur reference auf object: aus diesem Projekt wird gewählt |
label_field | keins | nur reference auf object: Feldname des Titels im Zielprojekt |
object_types | alle | nur reference auf object: erlaubte Objektarten als Liste oder kommagetrennt |
width | automatisch | Breite der Tabellenspalte, etwa 6rem |
required | false | Leer erzeugt einen Hinweis. Sperrt nie |
placeholder | leer | Platzhaltertext |
Kurzform: "fields": ["hoehe", "breite"] ergibt Textfelder mit Schlüssel gleich Beschriftung.
Ein date-Unterfeld zeigt die Datumsauswahl, solange der Wert leer oder ISO ist; ein bestehendes 14.02.2026 bleibt ein Textfeld. Ein select-Wert außerhalb der Liste wird ergänzt statt verworfen.
Verweise
Eine Spalte vom Typ reference zeigt auf einen Eintrag einer Bibliothek. Gespeichert wird nur dessen
Kennung, nie die Beschriftung; die liest Moliri beim Anzeigen nach.
library | Ziel | Gespeichert | Auswahl |
|---|---|---|---|
normdata | ein Normdatensatz | die Normdaten-ID, eine Ganzzahl | wie im Normdatenfeld |
address | eine Person im Adressbuch | die Personen-ID, eine Zeichenkette bis 36 Zeichen | wie im Adressfeld |
object | ein Objekt | die Objekt-ID, eine Ganzzahl | wie im Objektfeld , das bearbeitete Objekt fällt heraus |
Objektverweise kennen drei weitere Spaltenoptionen, benannt wie beim Objektfeld:
| Schlüssel | Ohne Angabe | Wirkung |
|---|---|---|
target_project_id | das Projekt des Feldes | Aus diesem Projekt wird gewählt |
label_field | keins | Sein Wert steht in der Zelle vor Projekt und Inventarnummer und wird in der Auswahl durchsucht |
object_types | alle | Nur Objekte dieser Objektarten stehen zur Wahl, etwa ["literatur"]. Klein geschrieben |
Ein Beispiel: Leihverkehr mit Leihgeber und Leihvertrag je Station.
JSON{ "view": "table", "max": null, "fields": [ { "key": "station", "label": "Station", "type": "text" }, { "key": "leihgeber", "label": "Leihgeber", "type": "reference", "library": "address" }, { "key": "ort", "label": "Ort", "type": "reference", "library": "normdata" }, { "key": "vertrag", "label": "Leihvertrag", "type": "reference", "library": "object", "target_project_id": 7, "label_field": "Titel", "object_types": ["vertrag"] } ] }
Gespeichert ist dann etwa [{"station": "Berlin", "leihgeber": "a3f9…", "ort": "1204", "vertrag": "8812"}].
Fehlt library oder ist sie unbekannt, zeigt die Zelle die gespeicherte Kennung als Text und bietet keine
Auswahl an. Passt eine Kennung nicht zur Bibliothek, etwa Buchstaben bei normdata, trägt die Zelle den
Hinweis ID passt nicht zur Bibliothek. Ohne Leserecht am Ziel oder wenn es gelöscht ist, steht statt
der Beschriftung die Kennung da.
Ein Verweis im JSON-Feld ist keine Verknüpfung : Er hat kein Gegenstück am Ziel, und das Ziel weiß nichts von ihm. Er passt für Angaben, die zu einem Eintrag gehören, etwa den Bearbeiter einer Bewegung. Was eine eigene Aussage über das Objekt ist, wird eine Verknüpfung oder ein Objektfeld .
Im Export bleibt der Verweis die Kennung. Ein Ausgabe-Formatter findet im
Excel-Export und im Export nach einem Standard in zeilen zusätzlich die Beschriftung eines
Objektverweises unter ⟨Schlüssel⟩~label, im Beispiel vertrag~label. Normdaten- und Adressverweise
bleiben dort Kennungen.
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 output-Block macht im Export die Variante „Formatiert“ verfügbar, in Galerie, Tabelle und Kanban
ebenso. Er hat zwei Rümpfe:
JSON{ "output": { "entry": { "js": "return sub['hoehe'] + ' × ' + sub['breite'] + ' cm';" }, "total": { "js": "return verbinde(zeilen, '{__label}: {formatiert}', '; ');" }, "label": "Maße kurz" } }
entry formatiert einen Eintrag (118,5 × 64 cm), total das ganze Feld (Objekt: 118,5 × 64 cm; Rahmen: 130 × 75 cm). Fehlt total, 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 entry-Rumpf | im total-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, einen Wert unter einem gewählten Label, Spalten auf einzelne Schlüssel eines Eintrags oder Klartext, den der Bereinigungsschritt Text in JSON umformen umformt. Alles andere wird geparkt. Siehe JSON-Ziele . Zwei Parameter steuern den Import:
| Parameter (im Formular) | Schlüssel | Ohne Angabe | Wirkung |
|---|---|---|---|
| Label beim Import | import_label | keine | Label, das der Excel-Import an jeder Spalte auf dieses Feld vorwählt, etwa de. Auch Zuordnungen auflösen schlägt es vor, wenn ein Text einem Schlüssel zugewiesen wird. Ergänzen prüft dann nur, ob unter diesem Label schon etwas steht |
| Beim Import anhängen | import.append | true | Startwert des Schalters Anhängen an Schlüssel-Spalten: true hängt je Zeile einen neuen Eintrag an, false ersetzt die vorhandenen Einträge (unter dem Label). Nur bei mehreren Einträgen je Label |
Von Text auf JSON umstellen
Text und JSON speichern ihre Werte gleich, ein Textfeld lässt sich deshalb auf JSON umstellen. Die Werte bleiben dabei Klartext, und das Feld zeigt sie als Rohinhalt. Der Bereinigungsschritt Text in JSON umformen teilt solchen Text an einem Trennzeichen auf und füllt die Schlüssel der Reihe nach; die Schlüssel sind mit den Spalten des Feldes vorbelegt. Über Bestand bereinigen in den Felddetails wird der ganze Bestand erst probeweise, dann wirklich umgeformt. Mit dem Schritt in der Kette nimmt auch der Excel-Import Klartext an, statt ihn zu parken. Siehe Bereinigung .
Beispiele
Dreisprachiger Titel:
JSON{ "view": "tabs", "labels": ["de", "en", "es"], "creatable": true, "max": 1, "fields": [{ "key": "titel", "label": "Titel", "type": "text" }], "output": { "total": { "js": "return verbinde(zeilen, '{__label}: {titel}', '; ');" }, "label": "Alle Sprachen" } }
Maße mit Bezug, wiederholbar:
JSON{ "view": "table", "labels": ["Objekt", "Rahmen", "Passepartout"], "creatable": true, "show_all": false, "max": null, "fields": [ { "key": "art", "label": "Art", "type": "select", "free": true, "values": ["Höhe", "Breite", "Tiefe", "Gewicht"], "width": "7rem" }, { "key": "wert", "label": "Wert", "type": "number", "required": true, "width": "5rem" }, { "key": "einheit", "label": "Einheit", "type": "select", "free": true, "values": ["cm", "mm", "m", "g", "kg"], "width": "4.5rem" } ], "output": { "entry": { "js": "return sub['art'] + ' ' + sub['wert'] + ' ' + sub['einheit'];" }, "total": { "js": "return verbinde(zeilen, '{__label}: {formatiert}', '; ');" } } }
Inventarnummern ohne Label:
JSON{ "view": "table", "max": null, "fields": [{ "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.