Как ввести квадратные скобки печати в 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+, называемую перечислением членов, но это не работает при настройке - для предотвращения возможного случайного обновления всех элементов массива с одинаковым значением; увидеть этот ответ.
- Обратите внимание, что вы можете получить элементы массива