Можно ли в PowerShell преобразовать такую ​​строку «имя: eri c, город: Токио» в json? - PullRequest
0 голосов
/ 01 апреля 2020

Я использую PowerShell, и у меня есть строка типа "name:eric,city:tokyo", можно ли преобразовать ее в json, как показано ниже:

{
"name":"eric",
"city":"Tokyo"
}

Я пробовал с convertto-json командлетом, но не смог найти способ сделать это.

1 Ответ

2 голосов
/ 01 апреля 2020

Самым простым способом было бы проанализировать свойства из строки, преобразовать их в некоторый пользовательский тип объекта, а затем передать этот объект в ConverTo-Json. Использование "name:eric,city:tokyo" | ConvertTo-Json не рекомендуется, так как он не знает, как вычислить строку в JSON. Это также не вернет действительный JSON, что не то, что вы после. Ниже приведены некоторые способы, как вы могли бы сделать это вместо этого.

Метод 1:

Вставьте элементы вручную в хеш-таблицу ordered, а затем перенаправьте на ConverTo-Json:

$s = "name:eric,city:tokyo"

$items = [ordered]@{}

$s.Split(",") | ForEach-Object {
    $key, $value = $_.Split(":")
    $items[$key] = $value
}

$items | ConvertTo-Json

Метод 2:

Используйте PSCustomObject, аналогично Метод 1 :

$s = "name:eric,city:tokyo"

$psobject = New-Object -TypeName PSObject

$s.Split(",") | ForEach-Object {
    $key, $value = $_.Split(":")
    $psobject | Add-Member -NotePropertyName $key -NotePropertyValue $value
}

$psobject | ConvertTo-Json

Метод 3

Вместо того, чтобы хранить ваши данные в строке для начала, имейте свои предустановленные данные в PSCustomObject или ordered хеш-таблице. Тогда преобразование легко.

[PSCustomObject]@{
    name = "eric"
    city = "tokyo"
} | ConvertTo-Json

[ordered]@{
    name = "eric"
    city = "tokyo"
} | ConvertTo-Json

Все это приведет к:

{
  "name": "eric",
  "city": "tokyo"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...