Question:
I’m trying to update a Swagger JSON document in Powershell. I need to add a couple of properties and values if they do not already exist on the object.
The code for doing this is pretty simple:
1 2 3 4 5 6 7 |
$swaggerDoc = (Get-Content $filePath -raw | ConvertFrom-Json) $swaggerDoc | Add-Member -Name host -MemberType NoteProperty -Value "swagger.io" -Force $swaggerDoc | Add-Member -Name schemes -MemberType NoteProperty -Value @("https") -Force $swaggerDoc | ConvertTo-Json | Set-Content $filePath |
The problem I have is that the JSON gets completely destroyed when I save it back to the file: For example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
"get": { "tags": [ "Links" ], "operationId": "Links_GetAll", "parameters": [], "responses": { "200": { "description": "Returns all the available links in the system", "schema": { "type": "array", "items": { "$ref": "#/definitions/AdministrativeLink" } }, "x-nullable": true } } } |
becomes
1 2 |
"get": "@{tags=System.Object[]; operationId=Links_GetAll; parameters=System.Object[]; responses=}", |
I haven’t seen any other examples on how to do this in Powershell, is there some syntax or parameter I am missing in order to retain the original format?
Answer:
When using ConvertTo-Json
, use -Depth
to retain proper format of the JSON
.
For Example:
1 2 |
$swaggerDoc | ConvertTo-Json -Depth 10 | Set-Content $filePath |
I also had to add brackets around your JSON to make it valid JSON readable by powershell.