在不破坏JSON格式的情况下更新JSON文件

时间:2017-01-17 20:36:51

标签: json powershell swagger

我正在尝试在Powershell中更新Swagger JSON文档。如果对象上不存在属性和值,我需要添加几个属性和值。

执行此操作的代码非常简单:

$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

我遇到的问题是当我将JSON保存回文件时JSON完全被破坏:例如

  "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
      }
    }
  }

变为

"get":  "@{tags=System.Object[]; operationId=Links_GetAll; parameters=System.Object[]; responses=}",

我还没有看到任何其他关于如何在Powershell中执行此操作的示例,是否存在一些我缺少的语法或参数以保留原始格式?

2 个答案:

答案 0 :(得分:3)

使用ConvertTo-Json时,请使用-Depth保留JSON的正确格式。

例如:

$swaggerDoc | ConvertTo-Json -Depth 10 | Set-Content $filePath

我还必须在JSON周围添加括号,以使PowerShell可以读取有效的JSON。

答案 1 :(得分:0)

如果要剪切和粘贴,请确保删除格式。例如,如果您使用的是Mac,请使用" Command + Shift + V"粘贴,这将在剪切和粘贴时删除格式。也永远不要使用" TABS"在JSON文件中,只有" ENTER"和空间