Stream: Bereichsbezogen, global

  • Freigeben Version: Yokohama
  • Aktualisiert 30. Januar 2025
  • 11 Minuten Lesedauer
  • Die Stream API bietet Methoden für die Interaktion mit einem Stream von Elementen wie Datensätzen. Beispielsweise können Sie mit der Methode forEach() den Status jedes Datensatzes in einem von der GlideQuery- API zurückgegebenen Stream aktualisieren.

    Sie können ein Stream-Objekt wie folgt abrufen:

    • Instanziieren Sie ein Stream-Objekt mit dem Konstruktor.
    • Gibt ein Stream-Objekt aus der GlideQuery.select()- Methode zurück. Weitere Informationen finden Sie unter GlideQuery.

    Diese Methode ist statisch und erfordert keine Instanz der Klasse: fromArray().

    Verwenden Sie die Stream API in bereichsbezogenen oder globalen serverseitigen Skripts. Diese API erfordert das Plugin „GlideQuery“ [com.sn_glidequery].

    Implementierung

    Diese API kann mit der GlideQuery- API und der optionalen API in einem Builder-Muster, bei dem die Methodenaufrufe verkettet sind, wobei jede Methode auf dem zurückgegebenen Ergebnis der vorherigen Methode aufbaut. Verwenden Sie Methoden, um die Attribute der Abfrage zu definieren. Die Methoden werden erst ausgeführt, wenn Sie eine Terminalmethode aufrufen, eine Methode, die ein Abfrageergebnis zurückgibt, sodass Sie die Anforderungen der Abfrage definieren können, bevor Sie sie ausführen.arbeiten.

    Wenn die Abfrage einen einzelnen Datensatz zurückgibt, umschließt das System das Ergebnis in ein optionales Objekt. Wenn die Abfrage einen Stream von Datensätzen zurückgibt, umschließt das System das Ergebnis in einem Stream-Objekt. Mit diesen Objekten können Sie das Ergebnis mithilfe einer Reihe von Methoden in den einzelnen APIs verwalten.

    Dieses Skript führt beispielsweise eine Abfrage in der Aufgabentabelle aus, gruppiert die Datensätze nach Priorität und gibt jede Priorität zurück, die insgesamt Neuzuweisungen von mehr als vier aufweist.

    var query = new global.GlideQuery('task')
        .where('active', true) //Returns new GlideQuery object with a "where" clause.
        .groupBy('priority') //Returns new GlideQuery object with a "group by" clause.
        .aggregate('sum', 'reassignment_count') //Returns new GlideQuery object with a "sum(reassignment_count)" clause.
        .having('sum', 'reassignment_count', '>', 4) //Returns new GlideQuery object with a "having reassignment_count > 4" clause.
        .select() //Returns a stream of records wrapped in a Stream object.  
        .forEach(function (priority){ //Terminal method in the Stream class that executes the query and returns the result. 
          gs.info("Priority " + priority.group.priority + ": " + priority.sum.reassignment_count + " reassignments");
        });
    Ausgabe:
    Priority 1: 11 reassignments
    Priority 3: 6 reassignments
    Priority 5: 5 reassignments

    Terminalmethoden

    Aus Leistungsgründen ruft eine Abfrage Daten nur ab, wenn Sie eine Terminal-Methode aufrufen. Dies sind die Terminalmethoden der Stream -Klasse:

    Stream: Stream (Funktion NextFn)

    Instanziiert ein Stream-Objekt.

    Anstatt diesen Konstruktor zu verwenden, können Sie auch ein Stream-Objekt basierend auf einer Abfrage mit der GlideQuery -API zurückgeben.

    Tabelle : 1. Parameter
    Name Typ Beschreibung
    NextFn Funktion Eine Funktion, die das nächste Element im Stream abruft.

    In diesem Beispiel wird gezeigt, wie Sie ein Stream-Objekt basierend auf einem Zufallszahlengenerator erstellen. Achten Sie darauf, die limit() -Methode einzubeziehen, um eine Endlosschleife zu vermeiden.

    new Stream(Math.random)
       .map(Math.round)
       .map(function (num) { 
          return num === 1 ? 'heads' : 'tails'; 
       })
       .limit(10)
       .forEach(gs.info)
    

    Ausgabe:

    *** Script: tails
    *** Script: heads
    *** Script: tails
    *** Script: heads
    *** Script: tails
    *** Script: heads
    *** Script: tails
    *** Script: tails
    *** Script: tails
    *** Script: tails

    Stream – Block (Anzahl Anzahl)

    gibt Ergebnisse in Array-Batches zurück, die jeweils die Anzahl der an die Methode übergebenen Datensätze enthalten.

    Tabelle : 2. Parameter
    Name Typ Beschreibung
    count Nummer Anzahl der Datensätze in jedem vom Stream zurückgegebenen Array.
    Tabelle : 3. Rückgaben
    Typ Beschreibung
    Stream Objekt, das für die Interaktion mit einem Stream von Elementen wie Datensätzen verwendet wird.

    Dieses Beispiel zeigt, wie eine Tabelle abgefragt und das Ergebnis in Batches von Arrays aufgeteilt wird.

    var chunkResult = new GlideQuery('cmdb_ci_hardware')
        .select('asset', 'purchase_date')
        .limit(10)
        .chunk(5) //Returns arrays of 5 sys_ids at a time
        .forEach(function (chunk){ 
            gs.info(JSON.stringify(chunk, null, 2)); 
        });

    Ausgabe:

    *** Script: [
      {
        "asset": "2fa9680d3790200044e0bfc8bcbe5dfb",
        "purchase_date": "2022-02-28",
        "sys_id": "2ba9680d3790200044e0bfc8bcbe5dfc"
      },
      {
        "asset": "73c1fa8837f3100044e0bfc8bcbe5ded",
        "purchase_date": "2017-12-05",
        "sys_id": "b4fd7c8437201000deeabfc8bcbe5dc1"
      },
      {
        "asset": "cbc1ba8837f3100044e0bfc8bcbe5dad",
        "purchase_date": "2017-12-05",
        "sys_id": "25fd3c8437201000deeabfc8bcbe5dea"
      },
      {
        "asset": "8fc1ba8837f3100044e0bfc8bcbe5da9",
        "purchase_date": null,
        "sys_id": "108a9205c611227500786e160f9d343e"
      },
      {
        "asset": "27c1fa8837f3100044e0bfc8bcbe5dd8",
        "purchase_date": "2017-06-06",
        "sys_id": "a9a2d111c611227601fb37542399caa8"
      }
    ]
    *** Script: [
      {
        "asset": "93c1fa8837f3100044e0bfc8bcbe5d30",
        "purchase_date": "2017-12-05",
        "sys_id": "6b43105c37301000deeabfc8bcbe5db2"
      },
      {
        "asset": "a2c0b1213784200044e0bfc8bcbe5de3",
        "purchase_date": "2017-12-05",
        "sys_id": "aac0b1213784200044e0bfc8bcbe5de3"
      },
      {
        "asset": "33c1fa8837f3100044e0bfc8bcbe5def",
        "purchase_date": "2017-12-05",
        "sys_id": "d0e8761137201000deeabfc8bcbe5da7"
      },
      {
        "asset": "53c1fa8837f3100044e0bfc8bcbe5d1f",
        "purchase_date": "2017-12-05",
        "sys_id": "53fdbc8437201000deeabfc8bcbe5d10"
      },
      {
        "asset": "f1c031213784200044e0bfc8bcbe5de0",
        "purchase_date": "2017-12-05",
        "sys_id": "71c031213784200044e0bfc8bcbe5de1"
      }
    ]

    In diesem Beispiel wird gezeigt, wie eine untergeordnete Abfrage mit Batches von IDs erstellt wird. Wenn Sie die FlatMap()- Methode aufrufen, nachdem Sie die Chunk()- Methode verwendet haben, iteriert das System über den Batch der Datensätze anstatt über jeden einzelnen Datensatz.

    var chunkResult = new global.GlideQuery('cmdb_ci_hardware')
        .select('sys_id')
        .map(function (device) { return device.sys_id; })
        .chunk(5) //Returns arrays of 5 sys_ids at a time
        .flatMap(function (deviceIds) {
            return new GlideQuery('cmdb_sam_sw_install')
                .where('installed_on', 'IN', deviceIds)
                .select('software_model', 'installed_on');
        })
    
    gs.info(JSON.stringify(chunkResult));

    Stream – jeden (Funktionsprädikat)

    Wendet eine Prädikatfunktion auf jedes Element im Stream-Objekt an. Wenn das Prädikat für jedes Element im Stream „true“ zurückgibt, gibt die Methode „true“ zurück. Wenn das Prädikat für ein Element im Stream „false“ zurückgibt, gibt die Methode „false“ zurück.

    Tabelle : 4. Parameter
    Name Typ Beschreibung
    Prädikat Funktion Prädikatfunktion, die auf jeden Datensatz oder jedes Element im Stream-Objekt angewendet werden soll. Die Funktion muss jedes Element im Stream als Eingabe verwenden und einen booleschen Wert zurückgeben.
    Tabelle : 5. Rückgaben
    Typ Beschreibung
    Boolean

    Kennzeichnung, die angibt, ob die Prädikatfunktion für jedes Element im Stream „wahr“ zurückgibt.

    Gültige Werte:
    • true: Die Prädikatfunktion gibt für jedes Element im Stream „true“ zurück.
    • false: Die Prädikatfunktion gibt nicht für jedes Element im Stream „true“ zurück.

    In diesem Beispiel wird gezeigt, wie eine Prädikatfunktion auf jedes Element in einem Stream angewendet wird.

    var hasOnlyShortDescriptions = new global.GlideQuery('task')
       .whereNotNull('description')
       .select('description')
       .every(function (t) { 
           return t.description.length < 10; 
           });
    
    gs.info(hasOnlyShortDescriptions);

    Ausgabe:

    false

    Stream – Filter (Funktionsprädikat)

    Wendet eine Prädikatfunktion auf jedes Element im Stream-Objekt an. Wenn das Prädikat „true“ zurückgibt, gibt die Methode den Stream zurück. Wenn das Prädikat „falsch“ zurückgibt, gibt es ein leeres Stream-Objekt zurück.

    Um eine bessere Leistung zu erzielen, sollten Sie in der GlideQuery-Klasse nach Möglichkeit die Methoden wo(), woNotNull() und woNull() anstelle dieser Methode verwenden. Siehe GlideQuery.

    Tabelle : 6. Parameter
    Name Typ Beschreibung
    Prädikat Funktion Prädikatfunktion, die auf jeden Datensatz oder jedes Element im Stream-Objekt angewendet werden soll. Die Funktion muss jedes Element im Stream als Eingabe verwenden und einen booleschen Wert zurückgeben.
    Tabelle : 7. Rückgaben
    Typ Beschreibung
    Stream Objekt, das für die Interaktion mit einem Stream von Elementen wie Datensätzen verwendet wird.

    In diesem Beispiel wird gezeigt, wie alle Datensätze in der Aufgabentabelle anhand eines definierten Filters überprüft werden. Wenn die Datensätze dem Filter entsprechen, gibt das System den Stream der Datensätze zurück. Andernfalls wird ein leeres Stream-Objekt zurückgegeben.

    var shoutingTasks = new global.GlideQuery('task')
       .whereNotNull('description')
       .select('description')
       .filter(function (task) { 
           return task.description.toUpperCase() === task.description; 
       })

    Stream – finden (Funktionsprädikat)

    Gibt den ersten Datensatz oder das erste Element im Stream-Objekt zurück, der der Prädikatfunktion entspricht. Wenn keine Prädikatfunktion angegeben ist, gibt die Methode den ersten Datensatz oder das erste Element im Stream zurück.

    Tabelle : 8. Parameter
    Name Typ Beschreibung
    Prädikat Funktion Optional. Prädikatfunktion, die auf die Elemente im Stream-Objekt angewendet werden soll. Die Funktion muss jedes Element im Stream als Eingabe verwenden und einen booleschen Wert zurückgeben.
    Tabelle : 9. Rückgaben
    Typ Beschreibung
    Optional Objekt mit dem zurückgegebenen Datensatz.

    In diesem Beispiel wird gezeigt, wie der erste Datensatz aus dem Stream zurückgegeben wird.

    var UserOptional = new global.GlideQuery('sys_user')
       .where('active', true)
       .where('company.name', 'ServiceNow')
       .select()
       .find()
       .map(function (user) { 
          return JSON.stringify(user); 
       })
    
    gs.info(UserOptional);

    Ausgabe:

    Optional<{"sys_id":"babb4639b76233004fbc2089ee11a97f"}>

    Stream – FlatMap(function fn)

    Wendet eine Funktion auf jedes Element in einem Stream an. Gibt einen anderen Stream zurück, über den Sie iterieren können.

    Verwenden Sie diese Methode anstelle von map(), wenn die Funktion einen zweiten Stream von Datensätzen zurückgibt.

    Tabelle : 10. Parameter
    Name Typ Beschreibung
    Fn Funktion Funktion, die auf das Ergebnis der Abfrage angewendet werden soll, die ein Stream-Objekt zurückgibt.
    Tabelle : 11. Rückgaben
    Typ Beschreibung
    Stream Objekt, das den Stream der Datensätze enthält, die nach der Anwendung der Funktion aktualisiert werden.

    Dieses Beispiel zeigt, wie Sie die Benutzertabelle abfragen und dann eine untergeordnete Abfrage aus dem Ergebnis erstellen. In diesem Beispiel wird eine N+1-Abfrage ausgeführt, was zu Leistungsproblemen führen kann. Vermeiden Sie diesen Anwendungsfall in einer Produktionsumgebung.

    var records = new global.GlideQuery('sys_user')
       .where('last_login', '>', '2015-12-31')
       .select('first_name', 'last_name')
       .flatMap(function (u) {
          return new global.GlideQuery('task')
               .where('closed_by', u.sys_id)
               .select('closed_at', 'description')
               .map(function (t) {
                    return {
                        first_name: u.first_name,
                        last_name: u.last_name,
                        description: t.description,
                        closed_at: t.closed_at
                     };
               });
          })
       .limit(5)
       .toArray(100);
    
    gs.info(JSON.stringify(records));

    Ausgabe:

    [
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:14:56"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:07:43"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-06-15 06:59:05"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:07:33"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:07:14"
       }
    ]

    Stream – forEach(Function fn)

    Wendet die angegebene Funktion auf jeden Datensatz oder jedes Element im Stream an.

    Tabelle : 12. Parameter
    Name Typ Beschreibung
    Fn Funktion Funktion, die auf jedes Element im Stream angewendet werden soll.
    Tabelle : 13. Rückgaben
    Typ Beschreibung
    Keine

    In diesem Beispiel wird gezeigt, wie Sie das Ergebnis für jedes Element im Stream drucken.

    var firstNames = new global.GlideQuery('sys_user')
       .select('first_name')
       .forEach(function (u) { 
          gs.debug(u.first_name); 
       });

    Ausgabe:

    *** Script: [DEBUG] survey
    *** Script: [DEBUG] Lucius
    *** Script: [DEBUG] Jimmie
    *** Script: [DEBUG] Melinda
    *** Script: [DEBUG] Jewel
    *** Script: [DEBUG] Sean
    *** Script: [DEBUG] Jacinto
    *** Script: [DEBUG] Krystle
    *** Script: [DEBUG] Billie
    *** Script: [DEBUG] Christian
    *** Script: [DEBUG] Naomi
    ...

    Stream – fromArray(Object arr)

    Gibt ein Stream-Objekt zurück, das die Werte aus dem angegebenen Array enthält.

    Hinweis:
    Diese Methode ist statisch. Sie benötigen keine Instanz der -Klasse, um diese Methode zu verwenden.
    Tabelle : 14. Parameter
    Name Typ Beschreibung
    arr Array Array von Werten, aus denen der Stream erstellt werden soll.
    Tabelle : 15. Rückgaben
    Typ Beschreibung
    Stream Objekt, das für die Interaktion mit einem Stream von Elementen wie Datensätzen verwendet wird.

    In diesem Beispiel wird gezeigt, wie ein Stream-Objekt erstellt wird, das ein Array von Werten enthält.

    var nameStream = Stream.fromArray(['Bob', 'Sue', 'Sam'])
       .map(function (name) { 
          return name.toUpperCase(); 
       })
       .toArray(3);
    
    gs.info(JSON.stringify(nameStream));

    Ausgabe:

    ["BOB","SUE","SAM"]

    Stream – limit(Anzahl Anzahl)

    Begrenzt die Anzahl der vom Stream zurückgegebenen Ergebnisse.

    Um eine bessere Leistung zu erzielen, sollten Sie in der GlideQuery- Klasse nach Möglichkeit die limit() -Methode verwenden. Siehe GlideQuery. Möglicherweise müssen Sie diese Methode verwenden, um die Ergebnisse mit der Stream.platMap() -Methode einzuschränken.

    Tabelle : 16. Parameter
    Name Typ Beschreibung
    count Nummer Anzahl der zurückzugebenden Datensätze.
    Tabelle : 17. Rückgaben
    Typ Beschreibung
    Stream Objekt, das für die Interaktion mit einem Stream von Elementen wie Datensätzen verwendet wird.

    In diesem Beispiel erfahren Sie, wie Sie die von der Stream.platMap()- Methode zurückgegebenen Ergebnisse einschränken.

    var records = new global.GlideQuery('sys_user')
       .where('last_login', '>', '2015-12-31')
       .select('first_name', 'last_name')
       .flatMap(function (u) {
          return new GlideQuery('task')
               .where('closed_by', u.sys_id)
               .select('closed_at', 'description')
               .map(function (t) {
                    return {
                        first_name: u.first_name,
                        last_name: u.last_name,
                        description: t.description,
                        closed_at: t.closed_at
                     };
               });
          })
       .limit(5)
       .forEach(function (task){
          gs.info(JSON.stringify(task, null, 2));
       });

    Ausgabe:

    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:16"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:22"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:27"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:31"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:54"
    }

    Stream – map(Funktion fn)

    Wendet eine Funktion auf jedes Element in einem Stream an und gibt das aktualisierte Stream-Objekt zurück.

    Tabelle : 18. Parameter
    Name Typ Beschreibung
    Fn Funktion Funktion, die auf das Ergebnis der Abfrage angewendet werden soll, die jedes Element im Stream als Eingabe verwendet.
    Tabelle : 19. Rückgaben
    Typ Beschreibung
    Stream Objekt, das den Stream der Datensätze enthält, die nach der Anwendung der Funktion aktualisiert werden.

    In diesem Beispiel wird gezeigt, wie Sie eine Funktion auf jedes Element im Stream anwenden.

    var users = new global.GlideQuery('sys_user')
       .whereNotNull('first_name')
       .select('first_name')
       .map(function (u) { 
          return u.first_name.toUpperCase(); 
       })
       .toArray(100);
    
    gs.info(JSON.stringify(users));

    Ausgabe:

    [
       "SURVEY",
       "LUCIUS",
       "JIMMIE",
       "MELINDA",
       "JEWEL",
       "SEAN",
       "JACINTO",
       "KRYSTLE",
       "BILLIE",
       "CHRISTIAN",
       ...
    ]

    Stream –reduzieren (FunktionreduziererFn, Beliebiger Anfangswert)

    Führt eine Reduziererfunktion für jedes Element im Stream aus, was zu einem einzelnen Ausgabewert führt.

    Diese Methode ähnelt der nativen JavaScript- reduzierten Methode (). Weitere Informationen finden Sie in der w3schuls-Dokumentation.

    Tabelle : 20. Parameter
    Name Typ Beschreibung
    reduziererFn Funktion Funktion, die auf jedes Element im Stream angewendet werden soll und den Stream auf einen einzelnen Wert reduziert. Diese Funktion muss zwei Argumente annehmen:
    • acc: Akkumulator, der alle von der Funktion zurückgegebenen Werte akkumuliert.
    • cur: Aktuelles Element, das im Array akkumuliert wird.
    initialValue Beliebig Wert, der als Anfangswert an die Funktion übergeben wurde.
    Tabelle : 21. Rückgaben
    Typ Beschreibung
    Beliebig Kumulierte Summe aller von der Reduziererfunktion zurückgegebenen Elemente.

    In diesem Beispiel wird gezeigt, wie Sie den Datensatz mit dem längsten Namen aus der Benutzertabelle zurückgeben.

    var longestName = new global.GlideQuery('sys_user')
       .whereNotNull('first_name')
       .select('first_name')
       .reduce(function (acc, cur) {
           return cur.first_name.length > acc.length
               ? cur.first_name
               : acc;
           }, '');
    
    gs.info(JSON.stringify(longestName));

    Ausgabe:

    "ATF_TestItilUser1"

    Stream – einige (Funktionsprädikat)

    Wendet auf jedes Element im Stream eine Prädikatfunktion an, eine Funktion, die einen einzelnen Wert annimmt und „wahr“ oder „falsch“ zurückgibt. Wenn das Prädikat für ein Element im Stream „true“ zurückgibt, gibt die Methode „true“ zurück.

    Tabelle : 22. Parameter
    Name Typ Beschreibung
    Prädikat Funktion Prädikatfunktion, die auf die Elemente im Stream-Objekt angewendet werden soll. Muss einen booleschen Wert zurückgeben.
    Tabelle : 23. Rückgaben
    Typ Beschreibung
    Boolean

    Kennzeichnung, die angibt, ob die Prädikatfunktion für ein Element im Stream „wahr“ zurückgegeben hat.

    Gültige Werte:
    • wahr: Die Prädikatfunktion hat für ein Element im Stream „wahr“ zurückgegeben.
    • false: Die Prädikatfunktion hat für ein Element im Stream nicht „wahr“ zurückgegeben.

    In diesem Beispiel wird gezeigt, wie überprüft wird, ob Beschreibungen in der Aufgabentabelle länger als 1.000 Zeichen sind.

    var hasLongDescriptions = new global.GlideQuery('task')
       .whereNotNull('description')
       .select('description')
       .some(function (t) { 
          return t.description.length > 1000; 
       });
    
    
    gs.info(hasLongDescriptions);

    Ausgabe:

    false

    Stream – toArray(Anzahl Anzahl)

    Gibt ein Array zurück, das die angegebene Anzahl von Elementen aus dem Stream enthält.

    Tabelle : 24. Parameter
    Name Typ Beschreibung
    count Nummer Die maximale Anzahl von Elementen aus dem Stream, die im Array zurückgegeben werden sollen.
    Tabelle : 25. Rückgaben
    Typ Beschreibung
    Array Array, das die angegebene Anzahl von Elementen aus dem Stream enthält.

    In diesem Beispiel wird gezeigt, wie Sie einen Stream von Datensätzen in ein JavaScript-Array umwandeln.

    var users = new global.GlideQuery('sys_user')
        .limit(10)
        .select('first_name', 'last_name')
        .toArray(50);
    
    gs.info(JSON.stringify(users));

    Ausgabe:

    [
       {
          "first_name":"Jewel",
          "last_name":"Agresta",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d64"
       },
       {
          "first_name":"Sean",
          "last_name":"Bonnet",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d6d"
       },
       {
          "first_name":"Jacinto",
          "last_name":"Gawron",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d76"
       },
       {
          "first_name":"Krystle",
          "last_name":"Stika",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d7f"
       },
       {
          "first_name":"Billie",
          "last_name":"Cowley",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d88"
       },
       {
          "first_name":"Christian",
          "last_name":"Marnell",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d91"
       }
    ]