使用powershell将嵌套Json值导出到CSV



我一直在尝试循环浏览.json配置文件列表,以提取'name'、'entity_id'、'contact_info'和'sp_endpoint'。我一直在尝试获取以下代码块,并将其转储到一个csv中,该csv在一列中列出了每个值,并且每一行都属于该值所属的文件。

{
"sfg_ping::qa::standard_sp_connections": [
{
"name": "test",
"entity_id": "test",
"contact_info": "test@test.com",
"sp_endpoint": "test",
"sso_initialization_and_signature_policy": {
"sign_assertion_or_response": "response",
"sp_trust_model": "anchored",
"signing_certificate_id": "test",
"sp_initiated": {
"require_signed_authn_requests": true,
"primary_verification_certificate": "test"
}
}

我一直在使用这个脚本来尝试并实现这一点,但它会转储空值,并且不会处理大量文件列表。

Get-ChildItem -Path "C:Usersuserappdevpowershell-scriptsspConnections" |
ForEach-Object { 
{(Select-String -Pattern 'name' )}
{(Select-String -Pattern 'entity_id' )}
{(Select-String -Pattern 'contact_info' )}
{(Select-String -Pattern 'sp_endpoint' )}
}| Export-Csv "C:Usersuserappdevpowershell-scriptsexport.csv"

预期输出是这样的:

| filename | name | entityid |
|:---------|:----:| --------:|
| test     | test | test     |

真的迷失在这里,只是在寻找方向。

似乎可以通过遵循此逻辑从Json文件中获得所需信息,但它假设Json文件只有一个父属性,如sfg_ping::qa::standard_sp_connections,但只要只有一个属性名称,这就可以用于任何属性名称。

Get-ChildItem pathtothejsonfolder -Filter *.json -PipelineVariable file | ForEach-Object {
(Get-Content $_ -Raw | ConvertFrom-Json).PSObject.Properties.Value | Select-Object @(
@{ N = 'FileName'; E = { $file.Name }}, 'Name', 'entity_id', 'contact_info', 'sp_endpoint'
)
} | Export-Csv pathtomyexport.csv -NoTypeInformation

我使用两个不同的Json文件得到的结果:

FileName   name  entity_id contact_info   sp_endpoint
--------   ----  --------- ------------   -----------
test.json  test  test      test@test.com  test
test2.json test2 test2     test2@test.com test2

如果他们都有相同的父属性名称,那么:

(Get-Content $_ -Raw | ConvertFrom-Json).PSObject.Properties.Value

可替换为:

(Get-Content $_ -Raw | ConvertFrom-Json).'sfg_ping::qa::standard_sp_connections'

相关内容

  • 没有找到相关文章

最新更新