Конвертировать в JSON с комментариями из PowerShell - PullRequest
0 голосов
/ 27 июня 2018

У меня очень простой JSON, и этот код работает для него:

function Get-CustomHeaders() {
   return Get-Content -Raw -Path $JsonName | ConvertFrom-Json
}

Однако, если у моего json есть какие-либо комментарии // wololo, он ломается. Было бы слишком сложно заставить этот парсер принимать комментарии?

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

Решение в другом ответе удаляет // comments только если они находятся в начале строки (с пробелами или без них) и не удаляет /* multiline comments */

Этот код удаляет все виды // и /* multiline comments */ /

$configFile = (Get-Content path-to-jsonc-file -raw)
$configFile = $configFile -replace '(?m)\s*//.*?$' -replace '(?ms)/\*.*?\*/'

например все комментарии в этом файле:

{
  // https://github.com/serilog/serilog-settings-configuration
  "Serilog": {
    "MinimumLevel": "Error", // Verbose, Debug, Information, Warning, Error or Fatal
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "D:\\temp\\MyService\\log.txt",
          "rollingInterval": "Day",
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] ({App}) ({Environment}) {Message:lj}{NewLine}{Exception}"
        }
      } /*,
      {
        "Name": "Seq",
        "Args": {
          "serverUrl": "http://localhost:5341"
        }
      }*/
    ]
  }
}

Результаты:

{
  "Serilog": {
    "MinimumLevel": "Error",
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "D:\\temp\\MyService\\log.txt",
          "rollingInterval": "Day",
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] ({App}) ({Environment}) {Message:lj}{NewLine}{Exception}"
        }
      }
    ]
  }
}
0 голосов
/ 27 июня 2018

Удалить строки комментариев из вашего ввода перед преобразованием:

(Get-Content $JsonName) -replace '^\s*//.*' | Out-String | ConvertFrom-Json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...