Benutzer mit den meisten Antworten
Regex String druch Unique Id ersetzen

Frage
-
Grüss Euch alle...
Ich habe zum Freitag noch ein kleines Problem zu lösen :-(
Ich habe folgenden JSON String
"DocumentDataList": [ { "Id": "00000000-0000-0000-0000-000000000000", "_Id": "00000000-0000-0000-0000-000000000000", "NewId": "00000000-0000-0000-0000-000000000000", "AdditionalInformation": TEST, "DocumentTypeFull": "741", "DocumentReference": "TFT 2012 0460", "SysPersisted": false, "_SysPersisted": false }, { "Id": "00000000-0000-0000-0000-000000000000", "_Id": "00000000-0000-0000-0000-000000000000", "NewId": "00000000-0000-0000-0000-000000000000", "AdditionalInformation": "TEST", "DocumentTypeFull": "WA", "DocumentReference": "IVL17/11", "SysPersisted": false, "_SysPersisted": false }, { "Id": "00000000-0000-0000-0000-000000000000", "_Id": "00000000-0000-0000-0000-000000000000", "NewId": "00000000-0000-0000-0000-000000000000", "AdditionalInformation": "TEST", "DocumentTypeFull": "740", "DocumentReference": "724-1012-2685", "SysPersisted": false, "_SysPersisted": false } ],
In diesem Block muss ich alle 'NewId' Elemente mit GUID's ersetzten die für den ganzen Block eindeutig sein müssen.
Hat mir jemand eine Idee wie man das am besten löst ?
Gruss
Peter
Antworten
-
Hallo,die Zeilen mit den zu ersetztenden GUID's kannst du mit folgendem Ausdruck finden:
(?<="NewId":\s*)"\d{8}-\d{4}-\d{4}-\d{4}-\d{12}"
Da die Blöcke verschiedene GUID's benötigen, können wir die Regex.Replace-Methode nicht verwendne. Stattdessen müssen alle Funde manuell durch gegangen werden:
'Content ist der JSON-String' Dim sb As New StringBuilder Dim lastFound As Integer = 0 For Each match As Match In Regex.Matches(content, "(?<=""NewId"":\s*)""\d{8}-\d{4}-\d{4}-\d{4}-\d{12}""") sb.Append(content.Substring(lastFound, match.Index - lastFound)) 'Alles zwischen dem letzten Fund und dem aktuellen' sb.Append("""" & Guid.NewGuid().ToString() & """") 'GUID hinzufügen' lastFound = match.Index + 38 'GUID ist mit "" 38 Zeichen lang' Next sb.Append(content.Substring(lastFound)) 'Alles zwischen dem letzten Fund und dem aktuellen'
Durch Guid.NewGuid() wird eine neue, eindeutige GUID generiert.
Du könntest anstelle des Regex aber auch nach "NewId" im String suchen und die dahinter stehende GUID ersetzen. Der Code verändert sich dadurch nur geringfügig.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort vorgeschlagen Ionut DumaModerator Montag, 3. März 2014 16:02
- Als Antwort markiert Tom Lambert (Koopakiller)Moderator Montag, 3. März 2014 16:27
Alle Antworten
-
Hallo,die Zeilen mit den zu ersetztenden GUID's kannst du mit folgendem Ausdruck finden:
(?<="NewId":\s*)"\d{8}-\d{4}-\d{4}-\d{4}-\d{12}"
Da die Blöcke verschiedene GUID's benötigen, können wir die Regex.Replace-Methode nicht verwendne. Stattdessen müssen alle Funde manuell durch gegangen werden:
'Content ist der JSON-String' Dim sb As New StringBuilder Dim lastFound As Integer = 0 For Each match As Match In Regex.Matches(content, "(?<=""NewId"":\s*)""\d{8}-\d{4}-\d{4}-\d{4}-\d{12}""") sb.Append(content.Substring(lastFound, match.Index - lastFound)) 'Alles zwischen dem letzten Fund und dem aktuellen' sb.Append("""" & Guid.NewGuid().ToString() & """") 'GUID hinzufügen' lastFound = match.Index + 38 'GUID ist mit "" 38 Zeichen lang' Next sb.Append(content.Substring(lastFound)) 'Alles zwischen dem letzten Fund und dem aktuellen'
Durch Guid.NewGuid() wird eine neue, eindeutige GUID generiert.
Du könntest anstelle des Regex aber auch nach "NewId" im String suchen und die dahinter stehende GUID ersetzen. Der Code verändert sich dadurch nur geringfügig.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort vorgeschlagen Ionut DumaModerator Montag, 3. März 2014 16:02
- Als Antwort markiert Tom Lambert (Koopakiller)Moderator Montag, 3. März 2014 16:27
-
Hallo Peter,
Wenn Dir die Antwort von Tom geholfen hat, dann bitte markiere diese als Antwort.
Danke und Gruss,
Ionut
Ionut Duma, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.