我试图从JSON文件中获取一些信息,以便使用PowerShell进行处理。 我使用 Invoke-RestMethod ,基本上它可以工作:
$json = Invoke-RestMethod -Uri http://www.pgatour.com/data/r/012/leaderboard-v2.json
结果我得到了PSCustomObject,这就是我需要的东西。我可以立即访问其属性并获取所需数据。 但是,相同的方法对某些JSON文件不起作用,例如:对于 http://www.pgatour.com/data/r/current/schedule-v2.json 结果不是PSCustomObject,而是一个字符串。
为什么它适用于一个JSON并且不适用于另一个JSON?它们都是有效的JSON。有没有办法让PSCustomObject脱离第二个JSON?
答案 0 :(得分:2)
回答最后一个问题:尝试ConvertFrom-Json
将JSON字符串转换为常规PS对象。
ConvertFrom-Json cmdlet将JSON格式的字符串转换为 自定义对象(PSCustomObject),其中包含每个字段的属性 JSON字符串。 ...此cmdlet是在Windows PowerShell中引入的 3.0。
https://technet.microsoft.com/library/3612c3f9-2153-4a1e-aebc-3092d707d567(v=wps.630).aspx
为了完整性'为了这个目的,请使用ConvertTo-Json
返回。
至于为什么它适用于一个而不是另一个...使用此处给出的示例URI和Convert*-Json
cmdlet进行测试,第一个转换为精细,但第二个不转换。这可能与每个示例之间行为不同的原因有关。
ConvertFrom-Json : Cannot process argument because the value of argument "name" is not valid.
Change the value of the "name" argument and run the operation again.
第二个URI的响应中有一些东西导致了字符串到JSON转换的问题。第二个API返回一个大字符串(172667个字符)。这不是很大但是......
使用其中任何一个链接中的函数/代码与第二个API返回的数据确实产生了一个对象:
PS> ConvertFrom-Json2 -InputObject $json2
header : {[version, 0.0]}
_comment : This will be replaced with a separate file in the future.
thisWeek : {[weekNumber, 17], [startDate, 2016-04-17], [endDate, 2016-04-24]}
currentYears : {[r, 2016], [s, 2016], [h, 2016], [c, 2016]...}
years : {System.Collections.Generic.Dictionary`2[System.String,System.Object]}
呼!