首页 > 解决方案 > 在powershell中,是否可以将这样的字符串“name:eric,city:tokyo”转换为json?

问题描述

我正在使用 powershell,并且我有一个类似的字符串"name:eric,city:tokyo",是否可以将其转换为 json,如下所示:

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

我尝试使用convertto-jsoncmdlet,但可以找到一种方法来做到这一点。

标签: jsonpowershell

解决方案


最简单的方法是解析字符串中的属性,转换为一些自定义对象类型,然后将此对象传递给ConverTo-Json. "name:eric,city:tokyo" | ConvertTo-Json不推荐使用,因为它不知道如何将字符串评估为 JSON 。它也不会返回有效的 JSON,这不是你想要的。下面有一些方法可以代替您执行此操作。

方法一:

将项目手动插ordered入哈希表对象,然后通过管道传输到ConverTo-Json

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

$items = [ordered]@{}

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

$items | ConvertTo-Json

方法二:

使用 a 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

方法三

不要将数据存储在字符串中,而是将数据预设在哈希表PSCustomObjectordered哈希表中。然后转换很容易。

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

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

所有这些都会导致:

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

推荐阅读