Transformateur - Champ d’application, global

  • Rversion finale: Washingtondc
  • Mis à jour 1 févr. 2024
  • 4 minutes de lecture
  • L’API Transformer fournit des méthodes permettant d’analyser et de transformer un contenu source JSON ou XML structuré en sortie de paire clé-valeur structurée, à l’aide d’un ensemble défini de règles.

    L’API Transformer scriptée fonctionne avec les API TransformerDefinition et TransformerRuleList . Ensemble, ces API transforment des nœuds XML ou n’importe quelle entité d’un document JSON structuré en une sortie de paires nom-valeur. Entités JSON prises en charge, y compris les objets et les éléments d’un tableau, tels que les chaînes, les nombres et autres tableaux.

    • L’API TransformerRuleList vous permet de créer des listes de règles de transformation qui définissent les données du document source à inclure dans la sortie et la manière de transformer les données sources.

    • L’API TransformerDefinition associe une liste de règles de transformation à un chemin d’enregistrement JSON/XML pour définir des objets de définition de transformation réutilisables. Vous pouvez utiliser un objet de définition de transformation pour transformer un ou plusieurs documents sources.

    • L’API Transformer effectue la transformation des données réelle, une entité de données à la fois, à l’aide de la liste de règles de transformation spécifiée pour créer les données de sortie souhaitées.

    Vous pouvez utiliser la classe Transformer dans les scripts de serveur inclus dans le champ d’application et dans le champ d’application. Lorsque vous utilisez cette classe, utilisez l’identificateur d’espace de noms sn_tfrm. Avant que cette API ne soit disponible dans une instance, vous devez activer le module d’extension Transformation Service (com.glide.transform).

    L’exemple suivant illustre comment utiliser l’API TransformerRuleList pour définir les règles de transformation, l’API TransformerDefinition pour définir les critères de transformation et l’API Transformer pour effectuer réellement la transformation.

    Cet exemple de code récupère un document de détails de stock externe basé sur JSON, crée des règles pour transformer ces données en table tabulaire, puis transforme le document source, ligne par ligne. Voici un extrait du document source JSON en cours de transformation :

    {
      "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());
    } 

    Sortie :

     {ticker: "Now", change_percentage: "0", close_price: "165.77 USD", summary: "Shares of Now closed at 165.77" }

    Transformateur : getRow()

    Renvoie la ligne résultant de la dernière transformation (ou null s’il n’y a pas de ligne).

    Tableau 1. Paramètres
    Nom Type Description
    Aucun
    Tableau 2. Renvoie
    Type Description
    Objet Objet contenant une ligne/un nœud de données transformé.
    var results = []; 
    while (transformer.transform()) { 
      results.push(transformer.getRow());
    

    Sortie :

     {ticker: "Now", change_percentage: "0", close_price: "165.77 USD", summary: "Shares of Now closed at 165.77" }

    Transformateur : transform()

    Transforme la ligne/le nœud disponible suivant dans le document source.

    Tableau 3. Paramètres
    Nom Type Description
    Aucun
    Tableau 4. Renvoie
    Type Description
    Booléen Marqueur indiquant s’il existe une ligne suivante valide à transformer.
    • true : ligne suivante valide
    • false : aucune ligne supplémentaire
    var results = []; 
    while (transformer.transform()) { 
      results.push(transformer.getRow());
    

    Sortie :

     {ticker: "Now", change_percentage: "0", close_price: "165.77 USD", summary: "Shares of Now closed at 165.77" }

    Transformer - Transformer(Object transformerDefinition, String document)

    Instancie un objet Transformer (constructeur).

    Tableau 5. Paramètres
    Nom Type Description
    transformerDefinition Objet Objet décrivant la transformation de contenu ; inclut la liste de règles et le chemin d’enregistrement JSONPath/XPath.

    Utilisez les API TransformerRuleList() et TransformerDefinition() pour générer cet objet.

    document Chaîne Document source à traduire.

    Exemple

    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());
    }