Context
You can read a JSON file like below with ConvertFrom-Json, and write with ConvertTo-Json properly.
PS > Get-Content ./foo.json { "outerHash": { "innerHash": { "key": "value" } } } PS > Get-Content ./foo.json | ConvertFrom-Json | ConvertTo-Json { "outerHash": { "innerHash": { "key": "value" } } }
Problem
You also can read a JSON file like below with ConvertFrom-Json, but cannot write with ConvertTo-Json properly. ConvertTo-Json write a hash in array in hash as "@{key=value}" style string.
PS > Get-Content ./bar.json { "outerHash": { "arrayInHash": [ { "key": "value" } ] } } PS > Get-Content ./bar.json | ConvertFrom-Json | ConvertTo-Json { "outerHash": { "arrayInHash": [ "@{key=value}" ] } }
In this example, the result of ConvertTo-Json should be identical the result of Get-Content ./bar.json.
Reason
ConvertTo-Json has a option -Depth, and its default value is 2. This option is used when convert nested object to JSON.
Solution
Pass the appropriate value to -Depth option according to your object graph.
PS > Get-Content ./bar.json | ConvertFrom-Json | ConvertTo-Json -Depth 3 { "outerHash": { "arrayInHash": [ { "key": "value" } ] } }