JSONシリアル化された配列を作成しようとしています。その配列に1つの項目のみが含まれている場合、文字列の配列ではなく文字列を取得します(JSON)。
複数のアイテム(期待どおりに機能):
PS C:\> @("one", "two") | ConvertTo-JSON
[
"one",
"two"
]
単一の項目配列(期待どおりではありません):
PS C:\> @("one") | ConvertTo-JSON
"one"
何か不足していますか?
パイプラインなしで試してください:
PS C:\> ConvertTo-Json @('one', 'two')
[
"one",
"two"
]
PS C:\> ConvertTo-Json @('one')
[
"one"
]
私もこの問題にぶつかりましたが、それは私の構造が深すぎて、ConvertTo-Jsonが特定の深さより下のものすべてを文字列に平坦化したためです。
例えば:
PS C:\> $MyObject = @{ "a" = @{ "b" = @{ "c" = @("d") } } }
PS C:\> ConvertTo-Json $MyObject
{
"a": {
"b": {
"c": "d"
}
}
}
これを修正するには、-Depthに大きな値を渡します。
PS C:\> ConvertTo-Json $MyObject -Depth 100
{
"a": {
"b": {
"c": [
"d"
]
}
}
}
今日同じ問題に直面しました。追加するだけで、このようなオブジェクトがある場合
@{ op="replace"; path="clientName"; value="foo"}
次に、次のように指定する必要があります
ConvertTo-Json @( @{ op="replace"; path="clientName"; value="foo"} )
二重の@は混乱することがあります。
オブジェクトの子である配列でこの問題に直面しました。配列には1つのオブジェクトがあり、ConvertTo-Json
は配列内のオブジェクトを削除していました。
これを解決するための2つのこと:
-Depth
パラメータConvertTo-Json
$output = $body | ConvertTo-Json -Depth 10
配列内のオブジェクトをハッシュテーブルとして作成し、それをオブジェクトに変換する必要がありました
$myArray.Add([pscustomobject]@{prop1 = ""; prop2 = "" })