Transformer – Scoped, Global
Die Transformator -API bietet Methoden zum Analysieren und Transformieren von strukturierten JSON- oder XML-Quellinhalten in strukturierte Schlüssel-Wert-Paare mithilfe eines definierten Regelsatzes.
Diese API funktioniert mit den APIs „TransformDefinition“ und „TransformRuleList“. Zusammen wandeln diese APIs XML-Knoten oder eine beliebige Entität in einem strukturierten JSON-Dokument in eine Ausgabe von Name-Wert-Paaren um. Unterstützte JSON-Entitäten einschließlich Objekten und Elementen in einem Array, z. B. Zeichenfolgen, Zahlen und andere Arrays.
Mit der Transformatorregelliste -API können Sie Transformationsregellisten erstellen, die definieren, welche Daten im Quelldokument in die Ausgabe aufgenommen werden sollen und wie die Quelldaten transformiert werden.
Die Transformatordefinitions- API ordnet eine Transformationsregelliste einem JSON/XML-Datensatzpfad zu, um wiederverwendbare Transformationsdefinitionsobjekte zu definieren. Sie können ein Transformationsdefinitionsobjekt verwenden, um ein oder mehrere Quelldokumente umzuwandeln.
Die Transformator -API führt die eigentliche Datentransformation für eine Datenentität nach der anderen durch und verwendet dabei die angegebene Transformationsregelliste, um die gewünschten Ausgabedaten zu erstellen.
Sie können die Klasse „Transformer“ sowohl in bereichsbezogenen als auch in globalen Serverskripten verwenden. Wenn Sie diese Klasse verwenden, verwenden Sie den Namespace-Bezeichner sn_tfrm. Bevor diese API in einer Instanz verfügbar ist, müssen Sie das Plugin „Transformation Service“ (com.glide.transform) aktivieren.
Das folgende Beispiel veranschaulicht, wie Sie mit der API „TransformerRuleList“ die Transformationsregeln definieren, mit der API „TransformerDefinition“ die Transformationskriterien definieren und mit der API „Transformer“ die Transformation tatsächlich durchführen.
Dieses Codebeispiel ruft ein externes JSON-basiertes Lagerbestandsdetaildokument ab, erstellt Regeln für die Umwandlung dieser Daten in eine tabellarische Tabelle und wandelt dann das Quelldokument Zeile für Zeile um. Im Folgenden finden Sie einen Ausschnitt des zu transformierenden JSON-Quelldokuments:
{
"NOW": {
"quote": {
"symbol": "NOW",
"companyName": "ServiceNow Inc.",
"primaryExchange": "New York Stock Exchange",
"sector": "Technology",
"open": 166.78,
"openTime": 1522935000556,
"close": 165.77,
"changePercent": 0.00656,
...
},
...}var stockAPI = new sn_ws.RESTMessageV2('Stock Details', 'Default GET');
var response = stockAPI.execute();
var responseBody = response.getBody(); // obtain the source JSON document
/* Define the list of rules to use to transform the acquired JSON stock detail
information into a tabular table */
var transformerRuleList = new sn_tfrm.TransformerRuleList() // instantiate the rule list object
.fromJSON() // indicate that the source document is JSON
.addRule('ticker', '$.quote.symbol') // add a rule to copy the value in the "symbol" field of the source document to the ticker field in the output document (no changes)
.addRule('change_percentage', '$.quote.changePercent') // copy the "changePercent" field from source into the change_percentage field of output document
.thenMultiply('100') // multiply the change_percentage value by 100
.thenRoundDown('0') // addthen round it down to a whole number
.addRule('close_price', '$.quote.close') // copy the "close" field to the close_price field in the 21=-[';output
.thenAdaptCurrency('USD', false) // attach the US dollar code to the close_price field, but do not display the symbol
.addRule('summary') // add a blank "summary" field to the output (no corresponding source field)
.thenConcat('Shares of ') // in the summary field concatenate the string "Shares of "
.thenConcatSymbol('ticker') // then concatenate the "ticker" field from the source document
.thenConcat(' closed at ') // then concatenate the string " closed at "
.thenConcatSymbol('close_price'); // then concatenate the "close_price" field from the source document
// Create a transformer definition that associates the rule list to use and the record path of the set of records in the source document to transform.
var path = '$.*';
var transformerDefinition = new sn_tfrm.TransformerDefinition(transformerRuleList, path);
// Instantiate the transformer object.
var transformer = new sn_tfrm.Transformer(transformerDefinition, responseBody);
// Transform the source data, one row at a time, until all rows are processed.
var results = [];
while (transformer.transform()) {
results.push(transformer.getRow());
}
Ausgabe:
{ticker: "Now", change_percentage: "0", close_price: "165.77 USD", summary: "Shares of Now closed at 165.77" }
Transformator: Transformator (Objekt transformatorDefinition, Zeichenfolgendokument)
Instanziiert ein Transformatorobjekt (Konstruktor).
| Name | Typ | Beschreibung |
|---|---|---|
| transformatorDefinition | Objekt | Objekt, das die Inhaltstransformation beschreibt; enthält Regelliste und JSONPath/XPath-Datensatzpfad. Verwenden Sie die APIs „TransformRuleList()“ und „TransformDefinition()“, um dieses Objekt zu generieren. |
| Dokument | Zeichenfolge | Zu übersetzendes Quelldokument. |
var stockAPI = new sn_ws.RESTMessageV2('Stock Details', 'Default GET');
var response = stockAPI.execute();
var responseBody = response.getBody();
var transformerRuleList = new sn_tfrm.TransformerRuleList()
.fromJSON()
.addRule('ticker', 'quote.symbol')
.addRule('change_percentage', 'quote.change')
.thenMultiply('100')
.thenRoundDown('0')
.addRule('close_price', 'quote.close')
.thenAdaptCurrency('USD', false)
.addRule('summary')
.thenConcat('Shares of ')
.thenConcatSymbol('ticker')
.thenConcat(' closed at ')
.thenConcatSymbol('close')
var path = '$.*';
var transformerDefinition = new sn_tfrm.TransformerDefinition(transformerRuleList, path);
var transformer = new sn_tfrm.Transformer(transformerDefinition, responseBody);
var results = [];
while (transformer.transform()) {
results.push(transformer.getRow());
}
Umwandler – getRow()
Gibt die aus resultierende Zeile aus der letzten Transformation zurück (oder null, wenn keine Zeile vorhanden ist).
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Objekt | Objekt mit einer transformierten Datenzeile/einem transformierten Datenknoten. |
var results = [];
while (transformer.transform()) {
results.push(transformer.getRow());
Ausgabe:
{ticker: "Now", change_percentage: "0", close_price: "165.77 USD", summary: "Shares of Now closed at 165.77" }
Transformator: transform ()
Transformiert die nächste verfügbare Zeile/der nächste verfügbare Knoten im Quelldokument.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Boolean | Kennzeichnung, die angibt, ob eine gültige nächste Zeile für die Transformation vorhanden ist.
|
var results = [];
while (transformer.transform()) {
results.push(transformer.getRow());
Ausgabe:
{ticker: "Now", change_percentage: "0", close_price: "165.77 USD", summary: "Shares of Now closed at 165.77" }