J'ai deux variables de Byte[]
(J'ai choisi ce type pour un besoin spécifique, il doit donc être conservé.) qui sont déclarés comme suit :
$first = New-Object Byte[] 32
$second = New-Object Byte[] 32
et, j'ai mis en majuscules chaque indice des deux variables.
Maintenant, j'ai créé une table de hachage $List1
comme :
$List1=@{"First" = $first; "Second" = $second}
J'utilise la syntaxe ci-dessous pour créer le fichier json :
$List1 | ConvertTo-Json | Set-Content -Path $jsonFile1
C'est le premier contenu du fichier json :
{
"First": {
"value": [
210,
195,
131,
176,
88,
154,
57,
37,
2,
75,
182,
190,
156,
43,
113,
199,
63,
25,
109,
92,
220,
91,
219,
252,
113,
68,
202,
12,
147,
194,
36,
177
],
"Count": 32
},
"Second": {
"value": [
238,
225,
12,
172,
134,
94,
42,
204,
27,
78,
39,
166,
229,
111,
143,
254
],
"Count": 16
}
}
Puis je lis le premier fichier json dans une variable temporaire comme ci-dessous :
$tempHash = Get-Content -Path $jsonFile1 -Raw| ConvertFrom-Json
Desde $tempHash
est un PSCustomObject
je crée une nouvelle table de hachage $List2
comme ci-dessous :
$List2 = @{"First" = $tempHash.First.value; "Second"= $tempHash.Second.value}
que j'utilise pour créer le second fichier json comme ci-dessous :
$List2 | ConvertTo-Json | Set-Content -Path $jsonFile2
C'est le deuxième contenu du fichier json :
{
"First": [
133,
231,
19,
173,
60,
50,
105,
68,
38,
109,
99,
155,
2,
188,
216,
9,
8,
225,
203,
15,
167,
8,
188,
76,
192,
154,
183,
194,
1,
122,
143,
137
],
"Second": [
27,
3,
57,
67,
155,
145,
181,
194,
250,
10,
65,
90,
41,
230,
243,
196
]
}
J'utilise la même syntaxe pour créer les deux fichiers json. Alors, pourquoi leurs structures sont-elles différentes ?
[Edit]
Je soupçonne que la différence est due à cette même syntaxe :
$List1=@{"First" = $first; "Second" = $second}
parce que Byte[]
ne fonctionne pas comme une simple variable de type integer[]
type de variable. Corrigez-moi.
[Edit]
Donc, il s'avère que Byte[]
La variable de type a deux clés différentes. "value" qui contient le tableau réel des valeurs d'octets, et "Count", qui contient le nombre d'éléments dans le tableau. Byte[]
variable. Cependant, lorsque nous invoquons la Byte[]
comme une variable de type :
$first
qui est de Byte[]
on obtient uniquement les valeurs listées sous la clé "value". La valeur de la clé "count" n'est jamais affichée dans la console, mais elle est transmise à la table de hachage d'une manière ou d'une autre.
Et, un autre point à noter. Si j'utilise :
$List2 = @{"First" = $tempHash.First; "Second"= $tempHash.Second}
alors, je vais devoir utiliser :
$List2.First.Value #to get the value of the "First" key
et ça me met mal à l'aise parce que pour la $List1
hashtable, j'ai seulement eu besoin d'utiliser :
$List1.First #to get the value of the "First" key.
[Contournement]
J'ai créé une table de hachage $List
comme la table de hachage originale, comme ci-dessous, pour des raisons strictes. à usage unique :
$List | ConvertTo-Json | Set-Content -Path $jsonFile
Ensuite, j'ai créé deux tables de hachage $List1
y $List2
comme ci-dessous à partir de l'original $jsonFile
ci-dessus.
$tempHash = Get-Content -Path $jsonFile -Raw| ConvertFrom-Json
$List1 = @{"First" = $tempHash.First; "Second" = tempHash.Second}
$List2 = @{"First" = $tempHash.First; "Second" = tempHash.Second}
Cela m'a aidé à garder une certaine cohérence tout en faisant référence à leurs clés et valeurs.
Maintenant, j'utilise
#to fetch the values of the "First" keys of both hashtables.
$List1.First.value #and
$List2.First.value
De même, je fais la même chose pour la clé "Second" pour les deux hashtables. $List1
y $List2
.
#to fetch the values of the "Second" keys of both hashtables.
$List1.Second.value #and
$List2.Second.value
[Edit]
Il s'est avéré être un bogue dans ma version de Powershell comme indiqué par @mklement0 ci-dessous. La solution parfaite sera d'utiliser la syntaxe ci-dessous comme indiqué par @mklement0 :
# Ensure that the input array is constructed without the extra [psobject] wrapper.
$First = [Byte[]]::new(32)
$Second = [Byte[]]::new(32)