63 lines
2.3 KiB
PowerShell
63 lines
2.3 KiB
PowerShell
function ConvertFrom-JsonToHashtable {
|
|
<#
|
|
Copyright 2014 ASOS.com Limited
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
|
|
From: https://github.com/POSHChef/POSHChef/blob/master/functions/Exported/ConvertFrom-JSONtoHashtable.ps1
|
|
|
|
#>
|
|
<#
|
|
.SYNOPSIS
|
|
Helper function to take a JSON string and turn it into a hashtable
|
|
|
|
.DESCRIPTION
|
|
The built in ConvertFrom-Json file produces as PSCustomObject that has case-insensitive keys. This means that
|
|
if the JSON string has different keys but of the same name, e.g. 'size' and 'Size' the comversion will fail.
|
|
Additionally to turn a PSCustomObject into a hashtable requires another function to perform the operation.
|
|
This function does all the work in step using the JavaScriptSerializer .NET class
|
|
|
|
#>
|
|
[CmdletBinding()]
|
|
param(
|
|
|
|
[Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
|
|
[AllowNull()]
|
|
[string]
|
|
$InputObject,
|
|
|
|
[switch]
|
|
# Switch to denote that the returning object should be case sensitive
|
|
$CaseSensitive
|
|
)
|
|
|
|
# Perform a test to determine if the inputobject is null, if it is then return an empty hash table
|
|
if ([String]::IsNullOrEmpty($InputObject)) {
|
|
|
|
$dict = @{}
|
|
|
|
} else {
|
|
|
|
# load the required dll
|
|
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")
|
|
$deserializer = New-Object -TypeName System.Web.Script.Serialization.JavaScriptSerializer
|
|
$deserializer.MaxJsonLength = [int]::MaxValue
|
|
$dict = $deserializer.DeserializeObject($InputObject)
|
|
|
|
# If the caseinsensitve is false then make the dictionary case insensitive
|
|
if ($CaseSensitive -eq $false) {
|
|
$dict = New-Object "System.Collections.Generic.Dictionary[System.String, System.Object]"($dict, [StringComparer]::OrdinalIgnoreCase)
|
|
}
|
|
|
|
}
|
|
|
|
return $dict
|
|
}
|