Вот моя ситуация. У меня есть модуль PowerShell, который импортирует библиотеку PowerShell-JSON ; эта библиотека преобразует строки JSON в объекты PowerShell. Мой модуль предоставляет интерфейс для CouchDB, поэтому мои строки JSON получаются из HTTP-вызовов. У меня есть функция Send-CouchDbRequest
, которая делает HTTP-запрос к CouchDB и возвращает данные ответа в виде строки (данные ответа получаются с использованием StreamReader.ReadToEnd()
).
В другой функции, Get-CouchDbDocument
, я вызываю Send-CouchDbRequest и сохраняю вывод в переменной $json
. Согласно $json.GetType()
и $json | Get-Member
, это относится к типу System.String
. Если я затем передам эту строку в ConvertFrom-JSON
, я ожидаю получить обратно PSCustomObject
со свойствами, определенными в соответствии с предоставленным ей документом JSON; вместо этого я получаю строковое представление хеш-таблицы PowerShell, т.е. @{name1=value; name2=value2; name3=value3}
. Возвращаемый объект также имеет тип System.String
на основе тех же тестов, что и выше, а не ожидаемый PSCustomObject
. Мне кажется, что PowerShell выполняет какое-то автоматическое (и нежелательное / ненужное) преобразование типов здесь.
Ошибка не в PowerShell-JSON - я уже обсуждал ее с автором , и нам обоим удалось получить один и тот же вызов ConvertFrom-JSON
для работы в фиктивном модуле. Поэтому я пришел к выводу, что ошибка должна быть где-то в моем коде, возможно, из-за того, что строка пришла по HTTP.
Код для Get-CouchDbDocument выглядит следующим образом:
function Get-CouchDbDocument {
param(
[string] $document = $(throw "Document ID is required."),
[string] $database = $(throw "Database name is required."),
[string] $server = "127.0.01",
[int] $port = 5984
)
$json = Send-CouchDbRequest -dbHost $server -port $port -database $database -document $document -includeDoc
$document = $json | ConvertFrom-JSON
Write-Output $document
}
Код для Send-CouchDbRequest довольно длинный, и можно найти на GitHub . Пример строки JSON, которая не выполняется в описанном мной сценарии и работает в другом месте:
{"_id":"f42d2e0c5be0a7ab7bdc1cba23fc1d73","_rev":"1-59414e77c768bc202142ac82c2f129de","key":"value"}
Есть мысли? Большое спасибо заранее.