2013-09-06 40 views
14

JSON直列化配列を作成しようとしています。その配列に1つの項目しか含まれていないときは、JSONの文字列の配列ではなく文字列を取得します。ConvertTo-JSON単一項目の配列

複数のアイテム(として期待される動作します):

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

単品アレイ(として期待されていない):

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

私は何かが足りないのですか?パイプラインのない

答えて

22

試してみてください。

PS C:\>ConvertTo-Json @('one', 'two') 
[ 
    "one", 
    "two" 
] 
PS C:\>ConvertTo-Json @('one') 
[ 
    "one" 
]
+5

ああのいやを-depthするために、より大きな値を渡すことができます。この場合、パイプラインの使用方法があいまいであることがわかります。ありがとうございました。 ConvertTo-JSON固有のものではなく、一般的なpowershell-array-piplineの問題であることを私に認識させてくれました。 http://superuser.com/questions/414650/why-does-powershell-silently-convert-a- string-array-with-one-item-to-a-string – Luggage

+0

@荷物ここだけが正しければ: '@(@(1))| ConvertTo-Json' - まだ "NOPE" – user2864740

5

私もこの問題を打つが、私の構造が深すぎだったので、それがあってをConvertTo-JSONを文字列に一定の深さ以下のすべてを平坦化します。例えば

PS C:\> $MyObject = @{ "a" = @{ "b" = @{ "c" = @("d") } } } 
PS C:\> ConvertTo-Json $MyObject 
{ 
    "a": { 
       "b": { 
         "c": "d" 
        } 
      } 
} 

は、この問題を解決するには、あなたが

PS C:\> ConvertTo-Json $MyObject -Depth 100 
{ 
    "a": { 
       "b": { 
         "c": [ 
            "d" 
           ] 
        } 
      } 
}