I want to parse JSON in PowerShell but I can’t use the new v3 functions that are available in PowerShell. My first thought was to load the JSON.Net assembly and use that to parse the JSON string but it doesn’t work as I expect it to.
I have this JSON:
$json = "{""Name"": ""Apple"",
""Price"": 3.99,
""Sizes"": [
""Small"",
""Medium"",
""Large""]}"
I load the JSON.NET assembly with this code:
[Reflection.Assembly]::LoadFile("$currentPath\Newtonsoft.Json.dll”)
And tries to parse it with
$result = [Newtonsoft.Json.JsonConvert]::DeserializeObject($json)
Now I expect that $result["Name"] is Apple but I get nothing there. Any ideas?
The code ´$result.ContainsKey(“Name”)returnsTruebut$result.GetValue(“Name”)returnsnull`.
Ok, so here is how I did it so it works down to at least PowerShell v2 on Windows 2008.
First, load the Json.NET assembly for the version you would like to use, I took the .NET 3.5 version:
I had the JSON in a file since it was used in a deployment configuration I wrote, so I needed to read the file and then parse the json
Now to get values from the config you need to to use the
Itemmethod which seems defined by PowerShell on hashtables/dictionaries. So to get an item that is a simple string you would write:If you had an array of things you would need to do something like
To access nested items you write
That’s how I solved parsing JSON with Json.NET in PowerShell.