Почему ConvertTo-Json сбрасывает значения

Я использую PowerShell для изучения REST API. Я обнаружил странную аномалию. Когда я сериализую / описываю следующий объект, responses объект ушел! Я проверил, что он все еще в такте при преобразовании в объект.net, поэтому проблема возникает при преобразовании объекта.net в JSON.

$json  = @'
{
  "stubs": [
    {
      "responses": [
        {
          "is": {
            "body": "54"
          }
        },
        {
          "is": {
            "body": "21"
          }
        },
        {
          "is": {
            "body": "0"
          }
        }
      ]
    }
  ]
}
'@
$json | ConvertFrom-Json | ConvertTo-Json

Результат из вышеприведенного преобразования:

{
  "stubs": [
    {
      "responses": "  "
    }
  ]
}

Если я запускаю это, я получаю 54, как и ожидалось:

$json | ConvertFrom-Json | %{ $_.stubs.responses[0].is.body }  

Я работаю на Ubuntu, но не верю, что это должно иметь значение. Это должно быть легко проверить для кого-то в Windows.

1 ответ

Решение

ConvertTo-Json принимает необязательный Depth параметр, который (по какой-либо причине) по умолчанию равен 2. Сам параметр описан в связанных документах следующим образом:

Указывает, сколько уровней содержащихся объектов включено в представление JSON. Значением по умолчанию является 2.

Если вы укажете более высокое значение для этого параметра, он будет работать - максимальное значение равно 100:

$json | ConvertFrom-Json | ConvertTo-Json -Depth 100
Другие вопросы по тегам