How to round-trip this JSON to PSObject and back in Powershell

json, powershell

Solution

Use the parameter `Depth` with value 3 or larger. The default 2 is not enough, deeper data are simply converted to strings.

$json | ConvertFrom-Json | ConvertTo-Json -Depth 3

Output

{
    "settings":  {
                     "minimumApproverCount":  2,
                     "creatorVoteCounts":  false,
                     "scope":  [
                                   {
                                       "refName":  "refs/heads/d14rel",
                                       "matchKind":  "Exact",
                                       "repositoryId":  "a290117c-5a8a-40f7-bc2c-f14dbe3acf6d"
                                   }
                               ]
                 }
}

Problem

Powershell can't seem to correctly round-trip this JSON object: ``` { "settings": { "minimumApproverCount": 2, "creatorVoteCounts": false, "scope": [ { "refName": "refs/heads/d14rel", "matchKind": "Exact", "repositoryId": "a290117c-5a8a-40f7-bc2c-f14dbe3acf6d" } ] } } ``` Assuming `$json` is a string, this command: ``` $json | ConvertFrom-Json | ConvertTo-Json ``` produces the wrong JSON out of it: ``` { "settings": { "minimumApproverCount": 2, "creatorVoteCounts": false, "scope": [ "@{refName=refs/heads/d14rel; matchKind=Exact; repositoryId=a290117c-5a8a-40f7-bc2c-f14db e3acf6d}" ] } } ``` Notice it gets the "scope" variable wrong. Is there a way to fix this?

Original source