web-dev-qa-db-fra.com

ConvertTo-JSON un tableau avec un seul élément

J'essaie de créer un tableau sérialisé JSON. Lorsque ce tableau ne contient qu'un seul élément, je reçois une chaîne, pas un tableau de chaînes (en JSON).

Plusieurs éléments (fonctionne comme prévu):

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

Tableau à élément unique (pas comme prévu):

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

Est-ce que je manque quelque chose?

24
Luggage

Essayez sans le pipeline:

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

J'ai rencontré ce problème aussi mais c'était parce que ma structure était trop profonde et que ConvertTo-Json aplatit tout ce qui se trouvait sous une certaine profondeur en chaîne. 

Par exemple:

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

Pour résoudre ce problème, vous pouvez passer une valeur plus grande à -Depth.

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

Face au même problème aujourd'hui. Juste pour ajouter, si vous avez un objet comme celui-ci 

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

alors vous devez le spécifier comme 

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

Le double @ peut parfois devenir déroutant.

1
Saad