我想从Json url导入选定的数据,因此我可以将其转换为XML。
我正在使用以下代码导入。
(Invoke-RestMethod -URI "http://www.broadbandmap.gov/broadbandmap/broadband/dec2013/wireline?latitude=29.488412&longitude=-98.550208&format=json").Results.wirelineServices.providerName | Select-Object | Format-Table –AutoSize
所以我使用.Results.wirelineServices.providerName
从一个分支/表中提取所选列。
如何同时从。Results.broadbandSource.stateFips
提取数据?
谢谢你。
Json代码截图。
跟进问题
答案 0 :(得分:4)
我认为你应该稍微分开一下你的步骤:
$r = Invoke-RestMethod -URI "http://www.broadbandmap.gov/broadbandmap/broadband/dec2013/wireline?latitude=29.488412&longitude=-98.550208&format=json"
$providers = $r.Results.wirelineServices.providerName
$stateFips = $r.Results.broadbandSource.stateFips
请注意,在您的示例中,您对Select-Object
的调用是多余的(您没有选择任何内容,因此它不会更改输入对象)。
此外,关于Format-Table
(以及任何Format-
cmdlet)的非常重要的一点是仅显示所以它们应该始终是你做的最后一件事,如果事实上他们根本就是需要的。
我给出的代码为您提供了对象中的信息,您可以根据需要使用这些信息,过滤或显示。我不确定您是如何使用/显示它的,但由于有多个提供程序且只有一个stateFips值,我可能会假设您将Fips值应用于每个提供程序。以下是使用我们创建的$stateFips
变量的示例:
$r.Results.wirelineServices | Select-Object providerName,@{Name='stateFips' ; Expression={ $stateFips }}
这是一个仅使用原始结果$r
的示例:
$r.Results.wirelineServices | Select-Object providerName,@{Name='stateFips' ; Expression={ $r.Results.broadbandSource.stateFips }}
Select-Object
计算列语法请注意,第二列定义看起来有点不稳定。它实际上是一个哈希表,允许您指定列的名称,以及一个表达式(一个完整的代码块),其返回值将是列的值。它可以分布在多行上:
$r.Results.wirelineServices | Select-Object providerName,@{
Name = 'stateFips'
Expression = {
$r.Results.broadbandSource.stateFips
}
}
或者您甚至可以先将哈希表创建为变量:
$computed = @{
Name = 'stateFips'
Expression = {
$r.Results.broadbandSource.stateFips
}
}
$r.Results.wirelineServices | Select-Object providerName,$computed
$computed = @{
Name = 'stateFips'
Expression = {
$r.Results.broadbandSource.stateFips
}
}
$data = $r.Results.wirelineServices | Select-Object providerName,$computed
由于$data
仍然是一个对象,并且没有通过Format-
命令发送,我们仍然可以使用它!
$xml = $data | ConvertTo-Xml -NoTypeInformation
正如他的评论也提出的那样,我们不知道你希望如何格式化生成的XML。
所以这是另一种方法:
$r = Invoke-RestMethod -URI "http://www.broadbandmap.gov/broadbandmap/broadband/dec2013/wireline?latitude=29.488412&longitude=-98.550208&format=xml"
现在$r
已包含XML。您可以将其过滤掉并使用XPATH进行修改。除非你认为这种方式对你有好处,否则我现在不会进入这个目标。
希望这有帮助,如果我误解了你在这里尝试做什么,请告诉我。
答案 1 :(得分:1)
如果您想要复合对象,请尝试
$results = (Invoke-RestMethod -URI "http://www.broadbandmap.gov/broadbandmap/broadband/dec2013/wireline?latitude=29.488412&longitude=-98.550208&format=json")
$obj = $results.Results.wirelineServices
$obj | add-member -type noteproperty -Name StateFips -Value $($results.Results.broadbandSource.stateFips) -PassThru
$obj | convertto-xml -as string