首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从较大的PowerShell对象创建新的JSON对象

从较大的PowerShell对象创建新的JSON对象
EN

Stack Overflow用户
提问于 2017-05-03 00:36:48
回答 1查看 2.5K关注 0票数 2

从我通过Invoke-RestMethod检索的大型PowerShell对象中,我希望将其缩小为选择属性,并创建一个新的(较小的)对象,然后将其转换为JSON数组。

样本集由“脚本编者”提供:

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

给我:

代码语言:javascript
复制
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          : {0000000123486830}
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      : 

如果我在根级属性上使用select选项,这将如预期的那样工作:

代码语言:javascript
复制
$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

输出:

代码语言:javascript
复制
{
    "name":  "Nirvana",
    "disambiguation":  "90s US grunge band"
}

但是如果我尝试添加一个嵌套属性,它就不能像我希望的那样工作.

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

我想看到的是:

代码语言:javascript
复制
{
    "name":  "Nirvana",
    "disambiguation":  "90s US grunge band",
    "area":  {
        "sort-name":  "United States"
    }
}

我也尝试过扩展数组,但这似乎失去了我想保留的根级别字段:

代码语言:javascript
复制
$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"
}

任何建议/建议都非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-04 11:45:01

由TessellatingHeckler提供

代码语言:javascript
复制
select name, @{Name='sort-name'; Expression={$_.area.{sort-name}}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43749278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档