使用Powershell处理包含多个对象的JSON文件

使用Powershell处理包含多个对象的JSON文件,json,powershell,Json,Powershell,我有一个名为index.JSON的JSON文件,如下所示: { "First": { "href": "test/one two three.html", "title": "title one" }, "Second": { "href": "test/test test/one two three fou

我有一个名为index.JSON的JSON文件,如下所示:

{ 
  "First": {
    "href": "test/one two three.html",
    "title": "title one"
  },

  "Second": {
    "href": "test/test test/one two three four.html",
    "title": "title two"
    
  }
}
我想编写一个powershell脚本来更新每个对象的href,以将空格替换为-

JSON文件应如下所示:

{ 
  "First": {
    "href": "test/one-two-three.html",
    "title": "title one"
  },

  "Second": {
    "href": "test/test-test/one-two-three-four.html",
    "title": "title two"
    
  }
}
function Get-ObjectMembers {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True, ValueFromPipeline=$True)]
        [PSCustomObject]$obj
    )
    $obj | Get-Member -MemberType NoteProperty | ForEach-Object {
        $key = $_.Name

        [PSCustomObject]@{Key = $key; Value = $obj."$key"}
    }
}

$a = Get-Content 'index.json' -raw | ConvertFrom-Json | Get-ObjectMembers 


foreach($i in $a){
$i.Value.href.Replace(" ","-")
} 
我从这篇文章中得到了一些帮助:

我已经编写了一个脚本来获取所有href值,我不知道如何在原始JSON文件中更新相同的值。我的脚本如下所示:

{ 
  "First": {
    "href": "test/one-two-three.html",
    "title": "title one"
  },

  "Second": {
    "href": "test/test-test/one-two-three-four.html",
    "title": "title two"
    
  }
}
function Get-ObjectMembers {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True, ValueFromPipeline=$True)]
        [PSCustomObject]$obj
    )
    $obj | Get-Member -MemberType NoteProperty | ForEach-Object {
        $key = $_.Name

        [PSCustomObject]@{Key = $key; Value = $obj."$key"}
    }
}

$a = Get-Content 'index.json' -raw | ConvertFrom-Json | Get-ObjectMembers 


foreach($i in $a){
$i.Value.href.Replace(" ","-")
} 
我是这样做的

$path='index.json'
$Content= (Get-Content $path -raw | ConvertFrom-Json)
$memberNames=( $Content | Get-Member -MemberType NoteProperty).Name
foreach($memberName in $memberNames){
    ($Content.$memberName.href)=($Content.$memberName.href).Replace(" ","-")
    }
$Content | ConvertTo-Json | Out-File $path -Append