Как сохранить объект JSON в файл с помощью Powershell?

Я преобразовал следующий файл JSON в объект представления powershell.

{
"computer": [
    {
        "children": [   
            {   
                "children": [ {
                   "children": [ {
                        "path": "T:\Dropbox\kvaki.html",
                        "name": "kvaki",
                        "type": "url",
                        "url": "http://example.com"
                   } ],
                    "path": "T:\Dropbox\",
                    "name": "Njusha",
                    "type": "folder"
                }, {
                    "path": "T:\Dropbox\Europa.html",
                    "name": "Europa",
                    "type": "url",
                    "url": "http://example.com"
                }, {
                    "path": "T:\Dropbox\math.html",
                    "name": "math",
                    "type": "url",
                    "url": "http://example.com"
                } ],
                "path": "T:\Dropbox\",
                "name": "Money",
                "type": "folder"
            }
        ],
        "full_path_on_file_sys": "T:\Dropbox\"
    }
]

}

После выполнения некоторых вычислений с представлением powershell я хотел бы сохранить его в файл в формате JSON. Но команда $jsonRepresentation | ConvertTo-Json | Out-File "D:\dummy_path\file.json" сохраняет это таким образом

{
    "computer":  [
                     {
                         "children":  " ",
                         "full_path_on_file_sys":  "T:\Dropbox\"
                     }
                 ]
}

Вопрос: как добиться правильного сохранения сложного JSON-представления powershell?

5 ответов

Решение

Глубокий аргумент для ConvertTo-Json решает проблему.

$jsonRepresentation | ConvertTo-Json -depth 100 | Out-File "D:\dummy_path\file.json"

Просто передайте его в Set-Content или Out-File:

Get-Process powershell |
 ConvertTo-Json | 
 Set-Content json.txt

Если вы хотите одновременно просмотреть вывод и сохранить его в файл, вы можете передать команду tee.

Get-Process powershell | ConvertTo-Json |  Tee-Object json.txt

$json.properties.metadata | ConvertTo-Json -Compress

Если вы застряли в PowerShell версии 2, вам может помочь модуль JSON Джоэла Беннетта из "PowerShell Code Repository".

1) Команда ниже может быть использована для преобразования json в CSV

Пример:Get-Content package.json | Out-String | ConvertFrom-Json | Select parameter1, parameter2, parameter3 | ConvertTo-Csv -NoTypeInformation | Format-Table >> C:\JenkinsWorkspace\Result.csv

Get-Content: это похоже на команду "cat" в linux, которая получает все данные из файла "package.json" и конвертирует их из Json (используя функцию ConvertFrom-Json), извлекая подробности только необходимых параметров, а затем преобразуя их в CSV, используя Функция "ConvertTo-Csv" без каких-либо нежелательных заголовков типов и форматирования их в таблицу.

2) Приведенный выше результат также можно отформатировать в соответствующий csv, чтобы просмотреть его в формате Excel без дубликатов, а также с преобразованием текста в столбцы с помощью следующей команды:

Import-Csv "C:\Result.csv" -delimiter "," | Sort-Object _from -Unique | Export-csv "C:\FINAL_REPORT_$date.csv"

Другие вопросы по тегам