Recentemente convertendo una stringa contenete un JSON con il comando PowerShell ConvertFrom-Json mi sono imbattuto in questo errore
ConvertFrom-Json : Impossibile convertire la stringa JSON perché un dizionario convertito da tale stringa contiene le
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'.
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
con

PowerShell

$jsonStringa.Replace('"ID":', '"_ID":') | ConvertFrom-Json
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:

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
Tags:
Errori120 JSON31 PowerShell200
Potrebbe interessarti anche: