web-dev-qa-db-ja.com

ConvertTo-JSON単一のアイテムを持つ配列

JSONシリアル化された配列を作成しようとしています。その配列に1つの項目のみが含まれている場合、文字列の配列ではなく文字列を取得します(JSON)。

複数のアイテム(期待どおりに機能):

PS C:\> @("one", "two") | ConvertTo-JSON
[
    "one",
    "two"
]

単一の項目配列(期待どおりではありません):

PS C:\> @("one") | ConvertTo-JSON
"one"

何か不足していますか?

36
Luggage

パイプラインなしで試してください:

PS C:\> ConvertTo-Json @('one', 'two')
[
    "one",
    "two"
]
PS C:\> ConvertTo-Json @('one')
[
    "one"
]
57
Ansgar Wiechers

私もこの問題にぶつかりましたが、それは私の構造が深すぎて、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"
                              ]
                    }
          }
}
14
nkron

今日同じ問題に直面しました。追加するだけで、このようなオブジェクトがある場合

@{ op="replace"; path="clientName"; value="foo"}

次に、次のように指定する必要があります

ConvertTo-Json @( @{ op="replace"; path="clientName"; value="foo"} )

二重の@は混乱することがあります。

3
Saad

オブジェクトの子である配列でこの問題に直面しました。配列には1つのオブジェクトがあり、ConvertTo-Jsonは配列内のオブジェクトを削除していました。

これを解決するための2つのこと:

-DepthパラメータConvertTo-Json

$output = $body | ConvertTo-Json -Depth 10

配列内のオブジェクトをハッシュテーブルとして作成し、それをオブジェクトに変換する必要がありました

$myArray.Add([pscustomobject]@{prop1 = ""; prop2 = "" })
0
jaycer