如何解析嵌入在中的javascript变量数组http://up-for-grabs.net/#/?
我正在尝试使用powershell解析CSV文件中的内容。到目前为止,我已经编写了以下代码如何解析嵌入在中的javascript变量数组http://up-for-grabs.net/#/?,javascript,powershell,dynamic-arrays,Javascript,Powershell,Dynamic Arrays,我正在尝试使用powershell解析CSV文件中的内容。到目前为止,我已经编写了以下代码 $URL = "http://up-for-grabs.net/#/" $HTML = Invoke-WebRequest -Uri $URL $script_blocks = $HTML.ParsedHtml.getElementsByTagName("script") | Where{ $_.type -eq ‘text/javascript’ } $content = "" foreach ($s
$URL = "http://up-for-grabs.net/#/"
$HTML = Invoke-WebRequest -Uri $URL
$script_blocks = $HTML.ParsedHtml.getElementsByTagName("script") | Where{ $_.type -eq ‘text/javascript’ }
$content = ""
foreach ($script_block in $script_blocks)
{
if($script_block.innerHTML -ne $null -and `
$script_block.innerHTML.trim().StartsWith("var files"))
{
$content = $script_block.innerHTML.trim()
}
}
进一步查看内容,它似乎是一个嵌入JavaScript的变量数组,其初始行的格式如下所示。它的数组没有空格或新行,这是我为提高可读性而创建的
<script type="text/javascript">
var files = {
"aspnet-razor-4":{"name":"ASP.NET Razor 4","desc":"Parser and code generator for CSHTML files used in view pages for MVC web apps.","site":"https://github.com/aspnet/Razor","tags":["Microsoft","ASP.NET","Razor","MVC"], "upforgrabs":{"name":"up-for-grabs","link":"https://github.com/aspnet/Razor/labels/up-for-grabs"}},
"fsharpdatadbpedia":{"name":"FSharp.Data.DbPedia","desc":"FSharp.Data.DbPedia - An F# type provider for DBpedia","site":"https://github.com/fsprojects/FSharp.Data.DbPedia","tags":[".NET","DbPedia","F#"],"upforgrabs":{"name":"up-for-grabs","link":"https://github.com/fsprojects/FSharp.Data.DbPedia/labels/up-for-grabs"}},
"makesharp":{"name":"Make#","desc":"Use C# scripts to automate the building process","site":"https://github.com/sapiens/MakeSharp","tags":[".Net","C#","make","build","automation","tools"],"upforgrabs":{"name":"up-for-grabs","link":"https://github.com/sapiens/MakeSharp/labels/up-for-grabs"}},
"stateprinter":{"name":"StatePrinter","desc":"Automating unittest asserts and ToString() coding.","site":"https://github.com/kbilsted/StatePrinter","tags":["TDD","Unit Testing","TDD",".NET","C#","ToString","Debugging"],"upforgrabs":{"name":"Help wanted","link":"https://github.com/kbilsted/StatePrinter/labels/Help%20wanted"}}
</script>
如何在powershell中实现类似的快速解析,而不必编写带有字符串标记的大代码。经过一些研究,我发现这是一个JSON内容,powershell cmdlet需要用于此内容。我不想在这里复制整个脚本。请查看以了解如何有效使用此cmdlet。基本上,您需要记住此cmdlet返回的对象是一个自定义对象,需要对其进行枚举以获取各种属性。它不是一个数组,因此只有foreach才能揭示内容。下面是一个小代码示例
$file_json = $file_string | ConvertFrom-Json
$delim = " ; "
foreach ($item in $file_json | gm)
{
$props = $file_json.$($item.Name)
if($props.MemberType) {continue}
$row = $props.name.ToString()
$row += $delim + $props.desc.ToString()
$row += $delim + $props.site.ToString()
}
在web上搜索此cmdlet将为您提供有关如何处理此转换的更多详细信息
$file_json = $file_string | ConvertFrom-Json
$delim = " ; "
foreach ($item in $file_json | gm)
{
$props = $file_json.$($item.Name)
if($props.MemberType) {continue}
$row = $props.name.ToString()
$row += $delim + $props.desc.ToString()
$row += $delim + $props.site.ToString()
}