#json #powershell
Вопрос:
Здравствуйте, я новичок в powershell.
Я пытаюсь создать каталог, структурированный в формате json, с помощью powershell. похоже на эти изображения ниже
Пример формата json структуры каталогов
Я исследовал некоторые способы сделать это и обнаружил, что это похожий или лучший способ именования каталогов и файлов в формате json.
function Add-Tabstops{
param($Count)
$tabs = ""
for($i=0; $i -lt $Count; $i ){$tabs = " "}
return $tabs
}
function Output-JsonChildren{
param($Path, $Level = 1)
return $(Get-ChildItem -Path $Path | Where-Object{$_} | ForEach-Object{
(Add-Tabstops $Level)
"{`n"
(Add-Tabstops ($Level 1))
"`"name`"`: `"$($_.Name)`","
"`n"
(Add-Tabstops ($Level 1))
"`"children`": ["
$(if($_.psiscontainer){"`n" (Output-JsonChildren -Path $_.FullName -Level ($Level 2)) "`n" (Add-Tabstops ($Level 1))})
"]`n"
(Add-Tabstops ($Level))
"}"
}) -join ",`n"
}
$JSON = Output-JsonChildren -Path "C:UsersGlenDesktopdemocontainer" | Out-File "C:UsersGlenDesktopdemocontainertest.json"
"["
$JSON
"]"
Комментарии:
1. Если это работает для вас, почему бы просто не использовать его? КАК фпр
is their a similar or better way into naming directory and files into json format?
, что вы имеете в виду под этим? Всегда есть лучшие способы сделать что-то, но должна быть цель для того, что значит лучше. Т. Е. более быстрый, более элегантный код, меньше кода и т. Д. Вы не говорите, почему вы хотели бы это изменить. Что касаетсяexample... using hasttable
, файлы справки PowerShell показывают это на примере, а также множество статей/примеров/видео по всему Интернету. Что вы искали?
Ответ №1:
Что-то вроде этого:
function build-json {
param (
[string]$fullPath
)
$hashtable = @{}
$directories = get-childitem $fullPath -Directory
try{
$files = (get-childitem $fullPath -File)
if($null -eq $files) {
$hashtable.files = @()
}
else {
$hashtable.files = [array]$files.Name
}
}
catch {
echo 'xxx'
}
$hashtable.directories = @{}
foreach($directory in $directories) {
$element = Split-Path $directory.fullname -Leaf
$hashtable.directories.$element = build-json -fullPath $directory.FullName -hashtable $hashtable
}
return $hashtable
}
$sourcefolder = 'E:xxxSoftwareyyypython392'
$result3 = build-json -fullPath $sourcefolder -hashtable @{}
Ответ №2:
Да, это возможно.
Вам нужно будет написать небольшую рекурсивную функцию, которая просматривает словари и собирает информацию для вас.
Вы можете использовать хэш-таблицу ( @{}
) или объект PowerShell, но предпочтительнее использовать хэш-таблицу.
Get-ChildItem
и ConvertTo-Json
являются ли ваши друзья
Комментарии:
1. @JeremyCaney, я закрыл предыдущий вопрос как дубликат этого.
2. не могли бы вы привести мне пример, который поможет начать использовать hasttable