2017-03-03 9 views
1

現在、以下の構造から正しくキー値のペアから列挙値を取得しています。しかし、それは私がそれが限られていると信じて以来、私はInvoke-RestMethodを使用していない巨大なJSONファイルです。これを回避するために、私は次の.NETオブジェクトPowerShell - .NETオブジェクトによって逆シリアル化されたときにキー値のペアを列挙する

System.Web.Script.Serialization.JavaScriptSerializer 

[void][System.Reflection.Assembly]::LoadWithPartialName('System.Web.Extensions')   
$jsonserial= New-Object -TypeName System.Web.Script.Serialization.JavaScriptSerializer 
$jsonserial.MaxJsonLength = 67108864 

を使用これに伴う問題は、私は私が持つ多くの経験を持っていない、キーと値のペアを提示されていますということです。したがって、私は望ましくない構造を得ている。

私は取得しています結果は以下の通り:ここ

Key  Value    
---  -----    
age   28  
sex   Male  
age   27 
sex   Female   
age   30 
sex   Male  
age   32 
sex   Female 

は私が達成しようとしているものです:

Age  Sex 
---  --- 
28  Male 
27  Female 
30  Male 
32  Female 

私はforeach文

$jsonObject | 
    ForEach-Object { 
    foreach ($p in $_.PSObject.Properties) 
    { 
     $p.Value 
     } 
} | Format-Table 
でオブジェクトを列挙しようとしました

しかし、私の応答はこのようになります:

System.Collections.Generic.GenericEqualityComparer`1[System.String] 
2 
age 
sex 
28 
Male 
False 
False 
System.Object 
False 
System.Collections.Generic.GenericEqualityComparer`1[System.String] 
+1

'を呼び出し、WebRequestクラスを使用しないのはなぜ| ConvertFrom-Json'? –

+0

これは大きなJSONファイルで動作しますか?これらのファイルの一部は10 MB以上です。 –

+0

元のJSONのサンプルを表示できますか? – briantist

答えて

0

この問題を解決したすべての方々に感謝します。いくつかの調査の後、私は答えがJSONファイルに--join ""で結合することであることを発見しました。例えば上から.NETオブジェクトを追加した後、あなたがそのオブジェクトをデシリアライズし、-join使用する必要がある ""

例:

$personnelReport = $jsonserial.DeserializeObject($jsonFile -join '') 
3

ConvertFrom-Jsonは大きなファイルを扱うことができますが、PSカスタムオブジェクトではなくハッシュテーブルを返すJavaScriptSerializerよりも3倍も遅くなります(ここでは57MBの.jsonファイルで9秒と3秒です)。 JSONを仮定

は、これらのような非再帰レコードの配列である:

[ 
    { 
     "age": 28, 
     "sex": "Male" 
    }, 
    { 
     "age": 27, 
     "sex": "Female" 
    }, 
    { 
     "age": 30, 
     "sex": "Male" 
    }, 
    { 
     "age": 32, 
     "sex": "Female" 
    } 
] 

はPowerShellの3.0以降で使用可能[PSCustomObject]型アクセラレータを使用して変換する:

$users = foreach ($user in $jsonObject) { [PSCustomObject]$user } 

またはPowerShellの2.0:

変換すると約1.5倍速くなりますConvertFrom-Json。
実際のデータによっては、変換せずに直接ハッシュテーブルを処理することができます。

関連する問題