PowerShell "ConvertTo-Json" испортил вывод в формате JSON - PullRequest
0 голосов
/ 13 ноября 2018

1) $ Getjsonfilecontent = Get-Content "C: \ Scripts \ CreateADF-Наборы данных \ BUSI_RULE_BUILD_LOCATION_CODES_Source_Def.json" -Raw |ConvertFrom-Json

2) Добавить некоторые значения пары ключей в файл json

3) $ Getjsonfilecontent |ConvertTo-Json -Depth 100 |% {[System.Text.RegularExpressions.Regex] :: Unescape ($ _)} |set-content $ updatedleafjsonpath (updatedleafjsonpath является копией базового файла 'Getjsonfilecontent')

когда я это делаю, я вижу, что какой-то формат искажен из "$ updatedleafjsonpath", как показано ниже.Все «\» отсутствуют, и «\ n» также запутано в моем выводе.Примечание. В том же файле json есть другой раздел, в котором значения пар ключей не обновляются как часть шага 2, но эти разделы не обновляются и должны оставаться как есть до и после преобразования.Любая помощь в этом действительно приветствуется.

Input: same output is expected.
 "typeProperties": {
                "format": {
                    "type": "TextFormat",
                    "columnDelimiter": "|",
                    "rowDelimiter": "\n",
                    "quoteChar": "\"",
                    "nullValue": "\"\"",
                    "encodingName": null,
                    "treatEmptyAsNull": true,
                    "skipLineCount": 0,
                    "firstRowAsHeader": false
                },
                "fileName": "[parameters('Veh_Obj_properties_typeProperties_fileName')]",
                "folderPath": "[parameters('Veh_Obj_properties_typeProperties_folderPath')]"
            }
                                             }

Что я получил после преобразования:

"typeProperties":  {
                                                                "format":  {
                                                                               "type":  "TextFormat",
                                                                               "columnDelimiter":  "|",
                                                                               "rowDelimiter":  "
",
                                                                               "quoteChar":  """,
                                                                               "nullValue":  """",
                                                                               "encodingName":  null,
                                                                               "treatEmptyAsNull":  true,
                                                                               "skipLineCount":  0,
                                                                               "firstRowAsHeader":  false
                                                                           },
                                                                "fileName":  "[parameters('Veh_Obj_properties_typeProperties_fileName')]",
                                                                "folderPath":  "[parameters('Veh_Obj_properties_typeProperties_folderPath')]"
                                                            }

1 Ответ

0 голосов
/ 13 ноября 2018
never mind, got the answer.. added some more lines to code to make it work
$Getjsonfilecontent | ConvertTo-Json -Depth 100 | Out-File $Updatedleafjsonpath -Force
     # Remove unwanted Pattern
    $ReplacePatterns = @{
    "\\u003c" = "<"
    "\\u003e" = ">"
    "\\u0027" = "'"
    }
    $InputJson = Get-Content -Path $Getjsonfilecontent | Out-String
    foreach ($Pattern in $ReplacePatterns.GetEnumerator())
    {
        $InputJson = $InputJson -replace $Pattern.Key, $Pattern.Value
    }
    $InputJson | Out-File -FilePath $Updatedleafjsonpath
...