2013-09-06 38 views
14

Tôi đang cố gắng tạo một mảng được tuần tự hóa JSON. Khi mảng đó chỉ chứa một mục tôi nhận được một chuỗi, không phải là một chuỗi các chuỗi (trong JSON).ConvertTo-JSON một mảng với một mục duy nhất

Nhiều Items (các công trình như dự kiến):

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

Độc mục Array (không như mong đợi):

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

Tôi có thiếu cái gì?

Trả lời

22

Cố gắng mà không có đường ống:

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

Ahh yea. Tôi thấy cách sử dụng đường ống sẽ không rõ ràng trong trường hợp này. Cảm ơn bạn. Bạn đã làm cho tôi nhận ra rằng nó không phải là ConvertTo-JSON cụ thể mà là một vấn đề powerhell-array-pipline chung dẫn tôi đến: http://superuser.com/questions/414650/why-does-powershell-silently-convert-a- string-array-with-one-item-to-a-string – Luggage

+0

@Luggage Nếu chỉ có sự tỉnh táo: '@ (@ (1)) | ConvertTo-Json' - vẫn còn "NOPE" – user2864740

5

tôi trúng vấn đề này cũng nhưng đó là vì cấu trúc của tôi là quá sâu và ConvertTo-Json flattens tất cả mọi thứ dưới một độ sâu nhất định để một chuỗi.

Ví dụ:

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

Để sửa lỗi này, bạn có thể vượt qua một giá trị lớn hơn để chiều sâu

PS C:\> ConvertTo-Json $MyObject -Depth 100 
{ 
    "a": { 
       "b": { 
         "c": [ 
            "d" 
           ] 
        } 
      } 
} 
Các vấn đề liên quan