Как преобразовать вывод json в массив / список с помощью Powershell (в вывод json) - PullRequest
0 голосов
/ 28 мая 2020

Хотите преобразовать json вывод в массив или список с помощью Powershell.

Я попытался преобразовать вывод с помощью ConvertFrom-Json, а затем получить имя ключа и значения. Требуется предложение.

json Вывод:

{
    "demo1": {
        "type": [
            "tuple",
            [
                [
                    "list",
                    "string"
                ],
                [
                    "list",
                    "string"
                ]
            ]
        ],
        "value": [
            [
                "123"
            ],
            [
                "456"
            ]
        ]
    },
    "demo2": {
        "type": [
            "tuple",
            [
                "string",
                "string"
            ]
        ],
        "value": [
            "abc",
            "xyz"
        ]
    }
}

Используя Powershell, вы хотите преобразовать его, как показано ниже:

demo1 = [["123"],["456"]]
demo2 = ["abc","xyz"]

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Это должно быть что-то вроде:

$t = '{
    "demo1": {
        "type": [
            "tuple",
            [
                [
                    "list",
                    "string"
                ],
                [
                    "list",
                    "string"
                ]
            ]
        ],
        "value": [
            [
                "123"
            ],
            [
                "456"
            ]
        ]
    },
    "demo2": {
        "type": [
            "tuple",
            [
                "string",
                "string"
            ]
        ],
        "value": [
            "abc",
            "xyz"
        ]
    }
}'

$t = ConvertFrom-Json $t 


$t | Get-Member | Where-Object {$_.MemberType -eq 'NoteProperty'} | foreach {
$element = $_.Name

echo 'Property Name: '
echo $element
echo 'Elements: '
echo ($t.$element.value | ConvertTo-Json -Depth 99)

}

На данный момент ядро ​​PowerShell, похоже, ведет себя немного иначе, чем v3-5, поэтому вы, пока ядро ​​PowerShell, дадите вам правильный результат, который потребуется более старым версиям некоторая дополнительная обработка на этом этапе, см. здесь: Почему PowerShell дает другой результат в однострочном, чем в двухстрочном, при преобразовании JSON?

1 голос
/ 28 мая 2020

Похоже, довольно просто использовать convertfrom- json:

$a = get-content file.json | convertfrom-json

$a.demo1.value
123
456

$a.demo2.value
abc
xyz

Вы хотите, чтобы это было json?

$a.demo1.value | ConvertTo-Json -Compress
[["123"],["456"]]

$a.demo2.value | ConvertTo-Json -Compress
["abc","xyz"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...