Как ввести квадратные скобки печати в PowerShell в файле JSON - PullRequest
1 голос
/ 05 апреля 2019

Как я могу запросить изменение значения строки "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 Ответ

1 голос
/ 05 апреля 2019

tl; др

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

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


AS для что вы пробовали :

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

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

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

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