Отображение данных на определенную глубину при использовании Convertfrom-json
В настоящее время я пытаюсь создать скрипт для преобразования моих файлов JSON в файлы CSV. В настоящее время я получаю большую часть данных, но проблема, с которой я сталкиваюсь, заключается в расширении поля "глифы" для добавления этих данных также в csv. Ниже приведен пример JSON в настоящее время. Это похоже на то, что уже есть, но моя проблема с -depth, который извлекает convertfrom-json. Это только два уровня, и мне нужно, чтобы перейти на четыре.
{
"nodes": [
{
"id": 23,
"type": "Group",
"label": "DOMAIN ADMINS@.COM",
"glyphs": {
"0": {
"position": "top-right",
"font": "\"Font Awesome 5 Free\"",
"content": "",
"fillColor": "black",
"fontScale": 1.5,
"fontStyle": "900"
}
},
"folded": {
"nodes": {},
"edges": {}
},
$user1 = $env:USERNAME
Get-Content C:\Users\$user1\Documents\json_to_convert.json |
convertfrom-json | select -ExpandProperty nodes |
Export-CSV C:\Users\$user1\Documents\jsonTest_$((Get-Date).ToString('MM-dd-yy')).csv -NoTypeInformation
Поэтому я просто надеюсь также ввести глифы "position", "font", "content", "fillColor", "fontScale" и "fontstyle" из "в мой CSV-файл. Thos - единственные поля, которые я У меня проблемы с.
1 ответ
Если вы хотите поместить вложенные объекты в отдельные поля CSV, вам нужно подумать о том, как представить это в файле CSV. Ниже можно использовать для создания пользовательских свойств, которые рассчитываются с помощью выражения.
Get-Content C:\Users\$user1\Documents\json_to_convert.json | ConvertFrom-Json | Select -ExpandProperty nodes | `
Select -Property id,type,label, `
@{Name='Glyphs-position';Expression={$_.glyphs.0 | Select -ExpandProperty position}},`
@{Name='Glyphs-font';Expression={$_.glyphs.0 | Select -ExpandProperty font}},`
@{Name='Glyphs-content';Expression={$_.glyphs.0 | Select -ExpandProperty content}},`
@{Name='Glyphs-fillColor';Expression={$_.glyphs.0 | Select -ExpandProperty fillColor}},`
@{Name='Glyphs-fontScale';Expression={$_.glyphs.0 | Select -ExpandProperty fontScale}},`
@{Name='Glyphs-fontStyle';Expression={$_.glyphs.0 | Select -ExpandProperty fontStyle}}`
| ConvertTo-Csv
Вероятно, это может быть написано более эффективно, но оно демонстрирует, как получить значения, которые вы ищете. В результате получается объект PowerShell:
id : 23
type : Group
label : DOMAIN ADMINS@.COM
Glyphs-position : top-right
Glyphs-font : "Font Awesome 5 Free"
Glyphs-content :
Glyphs-fillColor : black
Glyphs-fontScale : 1.5
Glyphs-fontStyle : 900
и однажды преобразован в CSV
"id","type","label","Glyphs-position","Glyphs-font","Glyphs-content","Glyphs-fillColor","Glyphs-fontScale","Glyphs-fontStyle","folded"
"23","Group","DOMAIN ADMINS@.COM","top-right","""Font Awesome 5 Free""","","black","1.5","900"