Errore di chiave duplicata convertendo una stringa JSON con PowerShell
Recentemente convertendo una stringa contenete un JSON con il comando PowerShell ConvertFrom-Json mi sono imbattuto in questo errore
con
in pratica rinomino uno dei due campi cercandolo la stringa "ID": e sostituendola prima di convertirlo... sperando di non avere altre occorrenze di questa stringa in altri punti.
Questo perché il comando ConvertFrom-Json non è case sensitive.
Una soluzione più robusta è quella di invocare il metodo DeserializeObject di .NET che è case sensitive:
ConvertFrom-Json : Impossibile convertire la stringa JSON perché un dizionario convertito da tale stringa contiene le
chiavi duplicate 'Id' e 'ID'.
chiavi duplicate 'Id' e 'ID'.
ConvertFrom-Json : The JSON string cannot be converted because a dictionary converted from that string contains the
duplicate keys 'Id' and 'ID'.
duplicate keys 'Id' and 'ID'.
In questo specifico caso il JSON arrivava da una chiamata ad una API SharePoint, https://tenantName.sharepoint.com/_a...s/GetByTitle
('Documents')/items, nella risposta viene ritornato sia il campo Id che il campo ID (maiuscolo) con lo stesso valore
La soluzione è stata convertire l'istruzione da PowerShell
$jsonStringa | ConvertFrom-Json
PowerShell
$jsonStringa.Replace('"ID":', '"_ID":') | ConvertFrom-Json
Questo perché il comando ConvertFrom-Json non è case sensitive.
Una soluzione più robusta è quella di invocare il metodo DeserializeObject di .NET che è case sensitive:
PowerShell
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")
$objJson = (New-Object -TypeName System.Web.Script.Serialization.JavaScriptSerializer -Property @{MaxJsonLength=67108864}).DeserializeObject($jsonStringa)
# nel mio caso il risultato era in
$objJson.value