如何在PowerShell中在JSON文件上输入新闻方括号

时间:2019-04-05 13:02:34

标签: arrays json powershell member-enumeration

如何使用PowerShell查询JSON文件中“类型”字符串的更改值?我找不到“类型”字符串。

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 个答案:

答案 0 :(得分:1)

tl; dr

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

请注意需要指定索引[0],因为$a.model.dataSources数组


针对您尝试过的操作的AS:

  

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

  • 您不能使用存储在 string '...')中的属性 path 直接访问嵌套属性,因为PowerShell会解释{{1 }}作为单个属性的名称。

  • 即使该问题已得到纠正,'model.dataSources.type'仍不能正常工作,因为$a.model.dataSources.type = "c"返回值的数组,并且您不能直接设置该数组的元素上的属性;取而代之的是,您必须明确地指定目标数组元素为目标,如上($a.model.dataSources所示。

    • 请注意,您可以通过称为member enumeration的PSv +功能,通过[0] 获取数组元素的.type值,但这不适用于< em> setting -通过设计,可以防止所有具有相同值的数组元素的意外更新;参见this answer