在powershell中将嵌套哈希表导出为csv
我有一个数组,其中嵌套了一个包含数据的哈希表:在powershell中将嵌套哈希表导出为csv,powershell,csv,nested,export,hashtable,Powershell,Csv,Nested,Export,Hashtable,我有一个数组,其中嵌套了一个包含数据的哈希表: tid : 1 token : 12345 participant_info : @{firstname=bob; lastname=smith; email=bob.smith@email.com} completed : y tid : 2 token : 67890 participant_info : @{firstname=Al
tid : 1
token : 12345
participant_info : @{firstname=bob; lastname=smith; email=bob.smith@email.com}
completed : y
tid : 2
token : 67890
participant_info : @{firstname=Alice; lastname=Jones; email=alice.jones@email.com}
completed : n
我想将其输出为CSV,并将名字、姓氏和电子邮件的嵌套项从内部哈希表中取出-例如
tid,token,firstname,surname,email,completed
1,12345,bob,smith,bob.smith@email.com,y
2,67890,alice,jones,alice.jones@email.com,n
我猜答案是通过foreach循环并创建一个自定义ps对象,但是因为我的嵌套项没有命名,所以我无法使用本文中的其他示例来解决这个问题
感谢您的帮助!谢谢 根据您的样本:
@(
[pscustomobject]@{
tid = 1
token = 12345
participant_info = @{
firstname = 'bob'
lastname = 'smith'
email = 'bob.smith@email.com'
}
completed = 'N'
}
...
)
和期望输出:
id,token,firstname,surname,email,completed
1,12345,bob,smith,bob.smith@email.com,y
2,67890,alice,jones,alice.jones@email.com,n
您可以这样做:
$JsonList = @( ... )
$Path = "$Env:UserProfile\file.csv"
ForEach ($Sample in $JsonList)
{
$Sample | Select-Object -Property @(
@{N = 'id'; E = { $Sample.tid }}
@{N = 'token'; E = { $Sample.token }}
@{N = 'firstname'; E = { $Sample.participant_info.firstname }}
@{N = 'surname'; E = { $Sample.participant_info.lastname }}
@{N = 'email'; E = { $Sample.participant_info.email }}
@{N = 'completed'; E = { $Sample.completed }}
) | Export-Csv -Path $Path -Append
}
编辑:您处理的是
PSCustomObject
,而不是Hashtable
,因此我前面的语法对此不起作用。下面是我现在假设您的代码的样子(我已经更新了上面的示例):
向我们展示您迄今为止所做的尝试,并解释它如何对您无效。这不是一个有效的哈希表。。您没有任何键,只有值。您的外部哈希似乎没有键值对?此外,这些数据是如何生成的?如果你控制住了这一点,我会说你最好的办法是从一开始就把它放在一个更好的数据结构中。你的哈希表也有一个开头
@(
),但没有相应的结尾)
。数据来自Limesurvey的远程控制API,使用列表参与者方法。我使用ConvertFrom JSON转换接收到的JSON。我刚刚注意到,返回的类型实际上是一个数组,其中确实包含内部哈希表-我想我需要删除这一个并再次询问!:-)@DavidPhillips使用$Json |格式列表-属性*
outputHanks更新您的问题,以了解您在这方面花费的时间。看起来确实有点奇怪,因为您给出的代码没有输出我所期望的答案。如果我只是在shell中键入变量,就会得到一个1123456@{firstname=bob;姓氏=smith;email=bob的表。smith@email.com}Y
如果我对$sample中的每个$item执行操作,然后写入主机($item[0])
,我得到@{id=1;token=12345;participant_info=;completed=N}
。无论我尝试什么,我都无法从这里返回内部值-例如$sample[0]['id']
谢谢!但这不会返回每个属性的数据-CSV显示多行,但没有数据$jsonlist.tid
列出所有tid,并且$jsonlist.tid.getvalue(0)
返回正确的值,但我无法使用方括号表示法返回任何内容。@DavidPhillips检查我的编辑。我已经更新了你的用例。轰!完美-非常感谢您的帮助,并坚持我的措辞糟糕的问题。我保留了hashtables的另一个版本,以防将来遇到。我认为任何带有{}括号而不是()的东西都是哈希表。
@"
[
{
"tid": 1,
"token": 12345,
"participant_info": {
"firstname": "bob",
"lastname": "smith",
"email": "bob.smith@email.com"
},
"completed": "N"
}
...
]
"@ | ConvertFrom-Json