Как ввести квадратные скобки печати в PowerShell в файле JSON

Как я могу запросить изменение значения строки "type" в моем файле JSON с помощью PowerShell? Я не могу добраться до строки "type".

Файл JSON

{
"name":  "b",
"compatibilityLevel":  1400,
"model":  {
              "culture":  "c",
              "dataSources":[
                                  {
                                      "type":  "structured"
                                  }
                            ]
         }}

PowerShell

$pathToJson =  "C:\Model.bim"

$a = Get-Content $pathToJson | ConvertFrom-Json

$a.'model.dataSources.type' = "c"

$a | ConvertTo-Json -Depth 10  | Set-Content $pathToJson

1 ответ

Решение

ТЛ; др

$a.model.dataSources[0].type = 'c'

Обратите внимание на необходимость указания индекса [0], так как $a.model.dataSources это массив.


КАК за то, что вы пробовали:

$a.'model.dataSources.type' = "c"

  • Вы не можете использовать путь свойства, хранящийся в строке ('...') для прямого доступа к вложенному свойству, потому что PowerShell интерпретирует 'model.dataSources.type' как имя одного свойства.

  • Даже если исправить эту проблему, $a.model.dataSources.type = "c" не работает, потому что $a.model.dataSources возвращает массив значений, и вы не можете напрямую установить свойство для элементов этого массива; вместо этого вы должны явно указать целевой элемент массива, как показано выше ([0]).

    • Обратите внимание, что вы можете получить элементы массива .type значения с $a.model.dataSources.typeчерез функцию PSv+, называемую перечислением членов, но это не работает при настройке - для предотвращения возможного случайного обновления всех элементов массива с одинаковым значением; увидеть этот ответ.
Другие вопросы по тегам