Powershell 4.0: Функция ConvertTo-JSONCustom

Задача: Преобразовать хэш-таблицу в JSON

Начиная с версии powershell 5 существует командлет ConvertTo-JSON, который с легкостью делает из хэш-таблицы JSON, но вот в более ранних версиях powershell приходится это делать вручную!

function ConvertTo-JsonCustom {
    param(
        [Parameter(Mandatory=$true)]
        [Hashtable]$InputObject
    )

    $json = "{"

    foreach ($key in $InputObject.Keys) {
        $value = $InputObject[$key]

        if ($value -is [Hashtable]) {
            $json += "`"$key`":$($(ConvertTo-JsonCustom $value))"
        } elseif ($value -is [Array]) {
            $json += "`"$key`":["
            foreach ($item in $value) {
                if ($item -is [Hashtable]) {
                    $json += "$(ConvertTo-JsonCustom $item),"
                } else {
                    $json += "$item,"
                }
            }
            $json = $json.TrimEnd(",") + "]"
        } else {
            $json += "`"$key`":`"$value`""
        }

        $json += ","
    }

    $json = $json.TrimEnd(",") + "}"

    return $json
}

Эта функция, названная ConvertTo-JsonCustom, принимает хэш-таблицу (Hashtable) в качестве обязательного параметра и возвращает JSON-строку, которая представляет собой сериализованное представление этой хэш-таблицы.

В первой строке функция создает переменную $json со значением { для начала JSON-строки.

Далее, функция проходит по каждому ключу в хэш-таблице, используя цикл foreach. Для каждого ключа функция получает значение $value, связанное с этим ключом в хэш-таблице.

Затем функция проверяет тип значения. Если значение является хэш-таблицей, функция вызывает сама себя рекурсивно и добавляет результат вызова в текущую JSON-строку, используя ключ как имя объекта.

Если значение является массивом, функция проверяет каждый элемент массива и, если элемент является хэш-таблицей, вызывает сама себя рекурсивно и добавляет результат в текущую JSON-строку, в противном случае просто добавляет элемент в JSON-строку.

Наконец, если значение не является ни хэш-таблицей, ни массивом, функция добавляет ключ и значение в JSON-строку в кавычках.

В конце функция удаляет последнюю запятую из строки и заканчивает ее символом }. Затем она возвращает полученную JSON-строку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *