Ответ
ConvertTo-Json
имеет параметр -Depth
:
Указывает, сколько уровней содержащихся объектов включенов представлении JSON.
Значение по умолчанию равно 2 .
Пример
Для выполнения полного обхода сJSON-файл, который нужно увеличить -Depth
для командлета ConvertTo-Json
:
$Json | ConvertFrom-Json | ConvertTo-Json -Depth 9
TL; DR
Возможно, потому что ConvertTo-Json
завершает ветви, которые глубже, чем по умолчанию -Depth
( 2 ) с полным именем типа (.Net), программисты предполагают ошибку или ограничение командлета и не читают справку или информацию.
Лично я считаю строку с простым многоточие (три точки:…) в конце обрезанной ветви будет иметь более ясное значение (см. Также: выпуск Github: 8381 )
Почему?
Эта проблема часто заканчивается в другом обсуждении: Почему глубина вообще ограничена?
В некоторых объектах есть циркулирующиеr указывает, что дочерний объект может ссылаться на родителя (или одного из его дедушек и бабушек), вызывая бесконечный цикл, если он будет сериализован в JSON.
Возьмем, например, следующую хеш-таблицу с parent
свойство, которое ссылается на сам объект:
$Test = @{Guid = New-Guid}
$Test.Parent = $Test
Если вы выполните: $Test | ConvertTo-Json
, по умолчанию он остановится на уровне глубины 2:
{
"Guid": "a274d017-5188-4d91-b960-023c06159dcc",
"Parent": {
"Guid": "a274d017-5188-4d91-b960-023c06159dcc",
"Parent": {
"Guid": "a274d017-5188-4d91-b960-023c06159dcc",
"Parent": "System.Collections.Hashtable"
}
}
}
Вот почему онне стоит автоматически устанавливать -Depth
на большое количество.