2017-05-03 5 views
1

Invoke-RestMethodを使用して取得した大規模なPowerShellオブジェクトから、これを縮小して属性を選択し、次に新しい(小さい)オブジェクトを作成してからJSON配列'The Scripting Guy' の礼儀を設定大きなPowerShellオブジェクトから新しいJSONオブジェクトを作成する

サンプル:

$request = 'http://musicbrainz.org/ws/2/artist/5b11f4ce-a62d-471e-81fc-a69a8278c7da?inc=aliases&fmt=json' 
$output = Invoke-WebRequest $request | ConvertFrom-Json 
$output 

は私を与える:

type-id  : e431f5f6-b5d2-343d-8b36-72607fffb74b 
name   : Nirvana 
ipis   : {} 
disambiguation : 90s US grunge band 
country  : US 
life-span  : @{end=1994-04-05; ended=True; begin=1988-01} 
sort-name  : Nirvana 
isnis   : {000000} 
aliases  : {@{name=Nirvana US; type-id=; sort-name=Nirvana US; end=; 
begin=; primary=; type=; locale=; ended=False}} 
begin_area  : @{name=Aberdeen; disambiguation=; sort-name=Aberdeen; 
id=a640b45c-c173-49b1-8030-973603e895b5} 
area   : @{sort-name=United States; id=489ce91b-6658-3307-9877-795b68554c98; iso-3166-1-codes=System.Object[]; disambiguation=; name=United States} 
type   : Group 
id    : 5b11f4ce-a62d-471e-81fc-a69a8278c7da 
end_area  : 
gender   : 
gender-id  : 

私はルートレベルの属性の選択オプションを使用する場合、これは期待通りに動作します:

$request = 'http://musicbrainz.org/ws/2/artist/5b11f4ce-a62d-471e-81fc- 
a69a8278c7da?inc=aliases&fmt=json' 
$output = Invoke-WebRequest $request | ConvertFrom-Json 
$output | select name, disambiguation | ConvertTo-Json 

出力:

{ 
    "name": "Nirvana", 
    "disambiguation": "90s US grunge band" 
} 

しかし、私は、ネストされた属性のいずれかを追加しようと、私は期待したいと、それは動作しません...

$output | select name, disambiguation, area.sortname | ConvertTo-Json 
{ 
    "name": "Nirvana", 
    "disambiguation": "90s US grunge band", 
    "area.sort-name": null # <-- Expect "United States" 
} 

私が見てみたいもの:

{ 
    "name": "Nirvana", 
    "disambiguation": "90s US grunge band", 
    "area": { 
     "sort-name": "United States" 
    } 
} 
私はまた、アレイを拡張しようとしたが、これは私が保持したい私のルートレベルのフィールドを失っているようだ

$output | select -expand area | select name, disambiguation, sort-name | ConvertTo-Json 
{ 
    "name": "United States", # <-- Taken from the area.name value 
    "disambiguation": "", # <-- Lost when expanding 
    "sort-name": "United States" 
} 

どれsuggesti ons/pointersが大いに評価されました!

+1

'選択名、@ {NAME = 'ソート名' によって提供されます。 Expression = {$ _。area.sort-name}} 'は、計算されたプロパティーであり、既存のプロパティー名を直接選択するほど簡単ではない場合に、 '仮想'プロパティーを生成する方法です。 – TessellatingHeckler

+0

ああセンセーショナル!それでおしまい!ありがとう! 'sort-name'の前後に角括弧を入れて、結果が終わりになるようにしてください。 ' select name、@ {Name = 'sort-name';式= {$ _。area。{sort-name}}} ' – Arrjo

+0

@Arrjo:答えとして入力し、後で回答を受け入れます。 –

答えて

0

TessellatingHeckler

select name, @{Name='sort-name'; Expression={$_.area.{sort-name}}} 
関連する問題