JSON aus Objekt erzeugen

Wertauflöser - Kurzfassung

Zweck: Gibt die Datenstruktur des Eingabewerts als Text in JSON-Notation zurück.

Siehe auch: Objekt aus JSON erzeugen

images/download/attachments/119247376/image2023-1-4_13-8-44-version-1-modificationdate-1672834125139-api-v2.png

Der JSON aus Objekt erzeugen-Wertauflöser gibt die Datenstruktur des Eingabewerts als Text in JSON-Notation (s. Json Datenencoder) zurück.

HINWEIS◄ Liegt "Kein Wert" ($null) als Eingabewert an, wird der Text null ausgegeben.

  • Der Parameter Klasse-Feldname definiert den Namen des Felds, das im Ausgabeformat verwendet werden soll, um die "Klasse" von Objekten zu deklarieren.

  • Die Option Native Typen erzwingen (per Standard abgewählt) erzwingt die Verwendung nativer JSON-Datentypen, z. B. Number für Zahlenwerte und Array für Listen.

Details zum Effekt der Option "Native Typen erzwingen"


Beispiel:

Das Feld "Rollen" (roles) eines Benutzerkontos (s. Benutzer) ist als "Eindeutige Liste" (Set) definiert, da demselben Benutzer dieselbe Rolle maximal einmal zugeordnet werden können soll. Die zugeordneten Rollen werden in dieser Liste anhand ihrer ID (id) referenziert, die bei der es sich definitionsgemäß um eine Ganzzahl vom Typ Long handelt. Der Wert des roles-Felds ist also ein Set von Long-Werten. Die folgende Tabelle veranschaulicht den Effekt einer Aus- oder Abwahl der Option Native Typen erzwingen beim Erzeugen eines JSON-Strings, der den Wert des Felds "Rolle" (roles) wiedergibt:

Option
"Native Typen erzwingen"

Rückgabewert
(JSON-String)

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/error.svg abgewählt
(Standard)

{   "class": "set",
"data": [
{
"class": "java.lang.Long",
"value": "1"
},{
"class": "java.lang.Long",
"value": "501"
},{
"class": "java.lang.Long",
"value": "1001"
}
]
}

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg ausgewählt

[ 1, 501, 1001 ]

HINWEIS◄ Da mit der Option Native Typen erzwingen unterschiedliche in Lobster Data Platform / Orchestration verwendete Datentypen auf denselben JSON-Datentyp abgebildet werden, können Informationen (zum Datentyp) verloren gehen.
Im Beispiel beinhaltet der Rückgabewert mit ausgewählter Option, nicht mehr die Information, dass die Liste als Set nur eindeutige Werte enthalten kann und dass die enthaltenen Werte definitionsgemäß vom Typ Long sind.

Konfiguration

Als Eingabewert wird ein Objekt erwartet.

Der Parameter Klasse-Feldname erlaubt als Textfeld die Eingabe eines statischen Texts, der im Ausgabeformat verwendet wird, um die "Klasse" von Objekten innerhalb des JSON-Dokuments zu deklarieren.

Als Standardwert ist die Zeichenfolge class vorbelegt.

Wird kein Klasse-Feldname angegeben, wird der Klassenname als Wert eines Felds mit dem Namen Leere Zeichenfolge ("") geschrieben.

HINWEIS◄ Eine Struktur mit einem Feld, das eine Leere Zeichenfolge ("") kann mit dem Objekt aus JSON erzeugen-Wertauflöser auch wieder geparst werden. Ist dabei der Klasse-Feldname nicht-leer (z. B. class) wird ein Client-Objekt erzeugt, das den Klassennamen in einem unbeschrifteten Feld enthält.

Aus einem Long-Wert (1343) als Eingabewert wird dann ein Client-Objekt mit der folgenden JSON-Struktur:

{"":"java.lang.Long", "value":"1343"}

Der Wert (1343) kann dem Feld value nach wie vor als String entnommen werden. Der Klassenname ist - ebenfalls als String - im unbeschrifteten Feld enthalten.

Allerdings sind für ein Client-Objekt mit einem unbeschrifteten Feld folgende Restriktionen zu berücksichtigen:

  1. Auf das unbeschriftete Feld kann - z. B. per Objekt-Feld-Wertauflöser, per get (Wert aus Datenfeld lesen) oder als Datenfeld (für Formularelemente) - nicht mehr direkt zugegriffen werden.

  2. Der Versuch ein Client-Objekt mit einem unbeschrifteten Feld in eine Client-XML-Struktur zu überführen (z. B. per Client XML aus Objekt erzeugen oder Server XML aus Objekt erzeugen), scheitert mit Fehler (Failed to encode: INVALID_CHARACTER_ERR), da der Encoder versucht, ein XML-Element mit dem Namen "" anzulegen.
    ANMERKUNG◄ Der Server XML aus Objekt erzeugen-Wertauflöser bildet das unbeschriftete Feld dagegen problemlos auf ein property mit name="" ab.

Die Option Native Typen erzwingen steuert die Behandlung von bestimmten Datentypen (Zahlenwerte und Listen) bei der Ausgabe, für die kein 1:1-Abbild im JSON-Format existiert.

  • Ist die Option Native Typen erzwingen abgewählt (Standard), dann werden betreffende Datentypen bei Bedarf als Datenobjekt mit explizitem Klasse-Feld ausgegeben.

  • Wird die Option Native Typen erzwingen ausgewählt, dann werden Daten der betreffenden Datentypen auf den entsprechenden nativen JSON-Datentyp (Number bzw. Array) abgebildet, was das Ausagbeformat vereinfachen kann (s. Info-Box oben).

Beispiele

Die Screenshots in der folgenden Tabelle stellen die Option Native Typen erzwingen nicht dar. Soweit eine Auswahl dieser Option den dargestellten Rückgabewert überhaupt beeinflusst, enthält die Tabelle entsprechende Hinweise.

Eingabewert

Konfigurationsbeispiel

Rückgabewert (Zeichenfolge)

Text
(für den Server ein
any-Objekt mit string-value)

images/download/attachments/119247376/image2022-6-20_16-25-39-version-1-modificationdate-1669201068979-api-v2.png

"HELLO WORLD!"

Datum/Uhrzeit
(DateTime-Objekt)

images/download/attachments/119247376/image2022-6-20_16-27-45-version-1-modificationdate-1669201068975-api-v2.png

{
"class": "de.lobster.scm.utils.date.DateTime",
"dateValue": "1655735288548",
"timeZone": "UTC"
}

bzw. mit Option images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg Native Typen erzwingen:

{
"class": "de.lobster.scm.utils.date.DateTime",
"dateValue": 1655735288548,
"timeZone": "UTC"
}

Heterogene Liste von Werten
(ein list-Objekt mit ggf. unterschiedlichem Typ je entry)

images/download/attachments/119247376/image2022-6-20_16-29-32-version-1-modificationdate-1669201068971-api-v2.png

{
"class": "list",
"data": [
{
"class": "java.lang.Long",
"value": "4711"
},
"0815"
]
}

bzw. mit Option images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/check.svg Native Typen erzwingen:

[
4711,
"0815"
]

Firmenkonto
(als Beispiel für eine Entität)

images/download/attachments/119247376/image2022-6-20_16-50-27-version-1-modificationdate-1669201068966-api-v2.png


HINWEIS◄ Das Setzen der per Standard abgewählten Option Native Typen erzwingen ergäbe für den rechts dargestellten Ausschnitt aus dem Rückgabewert folgende Unterschiede:

  • Die Feldwerte für creatorId, lastModifierId und ownerId würden als Ganzzahlen und nicht mehr als Strings ("...") ausgegeben.

  • Der Feldwert für parentCompanies würde als Liste von Ganzzahlen (hier: mit nur einem Eintrag) und nicht mehr als Liste von Long-Objekten ausgegeben:

        "parentCompanies": [ 702 ]
{
"class": "de.lobster.scm.base.company.CompanyAccount",
"address": { ... },
"attributes": [ ... ],
"created": {
"time": "1536306221204",
"nanos": 204000000
},
"creatorId": "1901",
"defaultTimeZone": null,
"id": "1902",
"lastModified": {
"time": "1651765029218",
"nanos": 218000000
},
"lastModifierId": "1901",
"locale": "en",
"metaType": "COMPANY",
"ownerId": "702",
"parentCompanies": [
{
"class": "java.lang.Long",
"value": "702"
}
],
"partialLoaded": false,
"styleName": "XFLOW",
"types": [
{
"class": "de.lobster.scm.denum.DynamicEnumDto",
"enumName": "de.lobster.scm.base.company.CompanyType",
"name": "FWD"
},
{
"class": "de.lobster.scm.denum.DynamicEnumDto",
"enumName": "de.lobster.scm.base.company.CompanyType",
"name": "CNE"
},
{
"class": "de.lobster.scm.denum.DynamicEnumDto",
"enumName": "de.lobster.scm.base.company.CompanyType",
"name": "AAL"
},
{
"class": "de.lobster.scm.denum.DynamicEnumDto",
"enumName": "de.lobster.scm.base.company.CompanyType",
"name": "DPA"
},
{
"class": "de.lobster.scm.denum.DynamicEnumDto",
"enumName": "de.lobster.scm.base.company.CompanyType",
"name": "INV"
}
]
}