Distinct@1
Der Node Distinct@1 entfernt doppelte Objekte aus einem Array basierend auf einem eindeutigen Eigenschaftswert. Er behält nur das erste Vorkommen jedes eindeutigen Werts und filtert nachfolgende Duplikate heraus.
Adapter-Voraussetzungen
- Allgemeine Verfügbarkeit: Alle Adapter unterstützen diesen Node-Typ.
Node-Konfiguration
Für die Felder path, targetPath, targetValueWriteMode und targetValueKind siehe Überblick.
transformations:
- type: Distinct@1
path: $.items[*] # Path to the array containing objects to deduplicate
distinctValuePath: $.id # Relative path to the property that defines uniqueness
targetPath: $.uniqueItems # Path where the deduplicated array should be stored
Parameter
Erforderliche Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
path | string | JSON-Pfad zum Quell-Array, das die zu deduplizierenden Objekte enthält |
distinctValuePath | string | Relativer Pfad zur Eigenschaft innerhalb jedes Objekts, die die Eindeutigkeit definiert |
targetPath | string | JSON-Pfad, an dem das deduplizierte Array gespeichert wird |
Optionale Parameter
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
targetValueWriteMode | string | Overwrite | Wie das Ergebnis geschrieben wird (Overwrite, Append, Prepend) |
targetValueKind | string | Simple | Die Art des zu schreibenden Werts (Simple, Array) |
documentMode | string | Extend | Dokumentmodus (Extend, Replace) |
Unterstützte Datentypen
Die Eigenschaft distinctValuePath muss auf einen Wert eines einfachen Typs verweisen. Die folgenden Datentypen werden für den Eindeutigkeitsvergleich unterstützt:
- Integer (long)
- Float (double)
- String
- Boolean
- DateTime
Deduplizierungsverhalten
- Der Node verarbeitet nur Objekte (
JObject) innerhalb des Quell-Arrays - Das erste Vorkommen jedes eindeutigen Werts wird beibehalten; nachfolgende Duplikate werden entfernt
- Objekte ohne einen Wert am
distinctValuePathwerden übersprungen - Werte werden anhand ihrer typisierten Repräsentation verglichen (nicht anhand der String-Konvertierung)
Beispiele
Beispiel 1: Doppelte Sensoren nach ID entfernen
Entfernen Sie doppelte Sensormessungen und behalten Sie nur das erste Vorkommen:
transformations:
- type: Distinct@1
path: $.readings[*]
distinctValuePath: $.sensorId
targetPath: $.uniqueReadings
Eingabe:
{
"readings": [
{ "sensorId": "S001", "value": 25.5, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S002", "value": 30.0, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S001", "value": 26.0, "timestamp": "2024-01-01T10:05:00Z" },
{ "sensorId": "S003", "value": 22.5, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S002", "value": 31.0, "timestamp": "2024-01-01T10:05:00Z" }
]
}
Ausgabe:
{
"readings": [
{ "sensorId": "S001", "value": 25.5, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S002", "value": 30.0, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S001", "value": 26.0, "timestamp": "2024-01-01T10:05:00Z" },
{ "sensorId": "S003", "value": 22.5, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S002", "value": 31.0, "timestamp": "2024-01-01T10:05:00Z" }
],
"uniqueReadings": [
{ "sensorId": "S001", "value": 25.5, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S002", "value": 30.0, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S003", "value": 22.5, "timestamp": "2024-01-01T10:00:00Z" }
]
}
Beispiel 2: Deduplizierung nach verschachtelter Eigenschaft
Verwenden Sie einen verschachtelten Pfad zur Bestimmung der Eindeutigkeit:
transformations:
- type: Distinct@1
path: $.orders[*]
distinctValuePath: $.customer.email
targetPath: $.uniqueCustomerOrders
Eingabe:
{
"orders": [
{ "orderId": "O001", "customer": { "email": "john@example.com", "name": "John" } },
{ "orderId": "O002", "customer": { "email": "jane@example.com", "name": "Jane" } },
{ "orderId": "O003", "customer": { "email": "john@example.com", "name": "John" } },
{ "orderId": "O004", "customer": { "email": "bob@example.com", "name": "Bob" } }
]
}
Ausgabe:
{
"orders": [
{ "orderId": "O001", "customer": { "email": "john@example.com", "name": "John" } },
{ "orderId": "O002", "customer": { "email": "jane@example.com", "name": "Jane" } },
{ "orderId": "O003", "customer": { "email": "john@example.com", "name": "John" } },
{ "orderId": "O004", "customer": { "email": "bob@example.com", "name": "Bob" } }
],
"uniqueCustomerOrders": [
{ "orderId": "O001", "customer": { "email": "john@example.com", "name": "John" } },
{ "orderId": "O002", "customer": { "email": "jane@example.com", "name": "Jane" } },
{ "orderId": "O004", "customer": { "email": "bob@example.com", "name": "Bob" } }
]
}
Beispiel 3: Deduplizierung nach numerischem Wert
Entfernen Sie Duplikate basierend auf einer Integer-Eigenschaft:
transformations:
- type: Distinct@1
path: $.products[*]
distinctValuePath: $.categoryId
targetPath: $.uniqueCategories
Eingabe:
{
"products": [
{ "name": "Laptop", "categoryId": 1 },
{ "name": "Mouse", "categoryId": 1 },
{ "name": "Book", "categoryId": 2 },
{ "name": "Pen", "categoryId": 3 },
{ "name": "Notebook", "categoryId": 2 }
]
}
Ausgabe:
{
"products": [
{ "name": "Laptop", "categoryId": 1 },
{ "name": "Mouse", "categoryId": 1 },
{ "name": "Book", "categoryId": 2 },
{ "name": "Pen", "categoryId": 3 },
{ "name": "Notebook", "categoryId": 2 }
],
"uniqueCategories": [
{ "name": "Laptop", "categoryId": 1 },
{ "name": "Book", "categoryId": 2 },
{ "name": "Pen", "categoryId": 3 }
]
}
Beispiel 4: Deduplizierung an Ort und Stelle
Speichern Sie das Ergebnis wieder am selben Ort:
transformations:
- type: Distinct@1
path: $.events[*]
distinctValuePath: $.eventType
targetPath: $.events
targetValueWriteMode: Overwrite
Eingabe:
{
"events": [
{ "eventType": "click", "timestamp": "2024-01-01T10:00:00Z" },
{ "eventType": "scroll", "timestamp": "2024-01-01T10:01:00Z" },
{ "eventType": "click", "timestamp": "2024-01-01T10:02:00Z" },
{ "eventType": "hover", "timestamp": "2024-01-01T10:03:00Z" }
]
}
Ausgabe:
{
"events": [
{ "eventType": "click", "timestamp": "2024-01-01T10:00:00Z" },
{ "eventType": "scroll", "timestamp": "2024-01-01T10:01:00Z" },
{ "eventType": "hover", "timestamp": "2024-01-01T10:03:00Z" }
]
}
Anwendungsfälle
- Datenbereinigung: Entfernen Sie doppelte Datensätze aus importierten Daten
- Sensordaten: Behalten Sie nur eindeutige Sensormessungen, wenn Duplikate auftreten
- Ereignisverarbeitung: Filtern Sie doppelte Ereignisse basierend auf Ereignistyp oder ID
- Benutzerdaten: Ermitteln Sie eindeutige Benutzer aus einer Liste von Aktivitäten
- Kategorieextraktion: Extrahieren Sie ein repräsentatives Element pro Kategorie
Hinweise
- Reihenfolgeerhaltung: Das erste Vorkommen jedes eindeutigen Werts wird beibehalten; die Reihenfolge der eindeutigen Elemente bleibt erhalten
- Null-Behandlung: Objekte ohne einen Wert am
distinctValuePathwerden vom Ergebnis ausgeschlossen - Typsensitivität: Werte werden anhand ihrer nativen Typen verglichen (z. B. ist die Ganzzahl 1 verschieden vom String "1")
- Leere Arrays: Wenn das Quell-Array leer oder null ist, wird keine Ausgabe geschrieben
- Originaldaten: Das ursprüngliche Quell-Array bleibt unverändert, es sei denn,
targetPathverweist auf denselben Ort