Transformer – Scoped, Global
Die Transformer -API bietet Methoden zum Analysieren und Transformieren von strukturierten JSON- oder XML-Quellinhalten in eine strukturierte Schlüssel-Wert-Paar-Ausgabe mithilfe eines definierten Satzes von Regeln.
Die geskriptete Transformer -API funktioniert zusammen mit den APIs TransformerDefinition und TransformerRuleList. 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 Objekte und Elemente innerhalb eines Arrays, z. B. Zeichenfolgen, Zahlen und andere Arrays.
Mit der TransformerRuleList -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 TransformerDefinition -API verknüpft eine Transformationsregelliste mit einem JSON/XML-Datensatzpfad, um wiederverwendbare Transformationsdefinitionsobjekte zu definieren. Sie können ein Transformationsdefinitionsobjekt verwenden, um ein oder mehrere Quelldokumente umzuwandeln.
Die Transformer -API führt die tatsächliche 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 Transformer -Klasse sowohl in bereichsbezogenen als auch in globalen Serverskripts verwenden. Wenn Sie diese Klasse verwenden, verwenden Sie den Namespace-Identifier sn_tfrm. Bevor diese API in einer Instanz verfügbar ist, müssen Sie das Transformation Service-Plugin (com.glide.transform) aktivieren.
Das folgende Beispiel zeigt, wie die TransformerRuleList -API zum Definieren der Transformationsregeln, die TransformerDefinition -API zum Definieren der Transformationskriterien und die Transformer -API zum Durchführen der Transformation verwendet werden.
In diesem Codebeispiel wird ein externes JSON-basiertes Dokument mit Aktiendetails abgerufen, Regeln für die Umwandlung dieser Daten in eine tabellarische Tabelle erstellt und dann das Quelldokument Zeile für Zeile umgewandelt. Das Folgende ist ein Ausschnitt aus dem JSON-Quelldokument, das transformiert wird:
{
"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" }
Transformer – getRow()
Gibt die aus der letzten Transformation resultierende Zeile zurück (oder NULL, wenn keine Zeile vorhanden ist).
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Objekt | Objekt, das eine transformierte Datenzeile/einen transformierten Knoten enthält. |
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" }
Transformer – transform()
Transformiert die nächste verfügbare Zeile/den nächsten verfügbaren Knoten im Quelldokument.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Boolean | Kennzeichnung, die angibt, ob eine gültige nächste zu transformierende Zeile 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" }
Transformer – Transformer(Object transformatorDefinition, String document)
Instantiiert ein Transformer-Objekt (Konstruktor).
| Name | Typ | Beschreibung |
|---|---|---|
| transformatorDefinition | Objekt | Objekt, das die Inhaltstransformation beschreibt; Enthält die Regelliste und den JSONPath/XPath-Datensatzpfad. Verwenden Sie die APIs TransformerRuleList() und TransformerDefinition(), um dieses Objekt zu generieren. |
| Dokument | Zeichenfolge | Zu übersetzendes Quelldokument. |
Beispiel
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());
}