Самым простым способом было бы проанализировать свойства из строки, преобразовать их в некоторый пользовательский тип объекта, а затем передать этот объект в 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"
}