Как отобразить полный PSCustomObject, который был преобразован из JSON - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть файл JSON, которым мне нужно манипулировать с помощью PowerShell.Я преобразую его в PSCustomObject с:

$template = Get-Content $filePath -raw | ConvertFrom-Json

Когда я пытаюсь распечатать $template с:

Write-Host $template

, я получаю:

@{$parameters=; variables=; resources=System.Object[]}

Тамбольше ключевых значений внутри parameters, variables и resources, которые я хочу увидеть.Как я могу распечатать весь расширенный файл?

Кроме того, как я могу распечатать значение определенного ключа?Например, если бы я просто хотел распечатать parameters, который сам мог бы содержать больше пар ключ-значение.

1 Ответ

0 голосов
/ 20 сентября 2018

Пример

В своем ответе я использую этот Пример Json (показан ниже), поскольку у вас нет примера в вашем вопросе:

$template = ConvertFrom-Json @'
{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}
'@

Форматированиесложные объекты

Как вы можете видеть здесь, оригинальный файл Json на самом деле уже является хорошим представлением того, как выглядит иерархия объектов.Это, очевидно, в формате Json (JavaScript).Если вы хотите отобразить его как обратимое выражение PowerShell , вы можете использовать функцию PowerShell ConvertTo-Expression из Галерея PowerShell .
Использованиепример:

Write-Host ($template | ConvertTo-Expression)

[PSObject]@{'glossary' = [PSObject]@{
                'GlossDiv' = [PSObject]@{
                        'GlossList' = [PSObject]@{'GlossEntry' = [PSObject]@{
                                        'Abbrev' = 'ISO 8879:1986'
                                        'Acronym' = 'SGML'
                                        'GlossDef' = [PSObject]@{
                                                'GlossSeeAlso' = @(
                                                        'GML',
                                                        'XML'
                                                )
                                                'para' = 'A meta-markup language, used to create markup languages such as DocBook.'
                                        }
                                        'GlossSee' = 'markup'
                                        'GlossTerm' = 'Standard Generalized Markup Language'
                                        'ID' = 'SGML'
                                        'SortAs' = 'SGML'
                                }}
                        'title' = 'S'
                }
                'title' = 'example glossary'
        }}

Обратите внимание, что вы можете легко перевернуть выражение с помощью PowerShell.Значение:
$Expression = $template | ConvertTo-Expression # Object to Expression
$template = &$Expression # Expression back to Object

Доступ к свойствам объекта Json и элементам массива

Что касается печати определенного ключа:

Чтобы обратиться к свойству объекта:

$template.Glossary.Title
example glossary

Чтобы обратиться к элементу массива (в цепочке объектов):

$template.Glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso[1]
XML
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...