0

I have a JSON File called index.json which looks like this :

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

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

I want to write a powershell script to update the href of each object to replace the spaces with -.

The JSON file should looks like this:

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

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

I got some help from this post: Iterating through a JSON file PowerShell

I have already written a script to get all the href values, I dont know how to update the same in the original JSON file. My script looks like this:

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(" ","-")
} 

1 Answers1

0

I've done it this way.

$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