嵌套JSON指定部分迭代及转CSV的PowerShell实现求助
嵌套JSON指定部分迭代及转CSV的PowerShell实现求助
嘿,我来帮你搞定这个JSON转CSV的问题!先看看你现有代码里的几个小问题,再一步步给你修正并实现需求。
首先,你的JSON结构里answers下的键是字符串"1",直接用$.Answers.1这种写法在PowerShell里会报错,因为数字开头的属性名需要用引号包裹;另外你代码里的变量引用也有错误,比如$._prettyFormat应该指向迭代对象的属性。
先看修正后的完整实现代码
假设你是从某个JSON对象(比如文件读取或管道传入)处理数据,这里给出通用的解决方案:
# 模拟你的原始JSON数据(如果是从文件读取,用Get-Content 'yourfile.json' | ConvertFrom-Json即可) $jsonInput = @" { "answers": { "1": { "name": "name", "order": "1", "sublabels": "{\"prefix\":\"Prefix\",\"first\":\"First Name \\/ Nombre primero\",\"middle\":\"Middle Name\",\"last\":\"Last Name \\/ Nombre de familia\",\"suffix\":\"Suffix\"}", "text": "Name / Nombre", "type": "control_fullname", "answer": { "first": "ABC", "last": "DEF" }, "prettyFormat": "ABC DEF" } } } "@ # 将JSON转换为PowerShell对象 $jsonObject = $jsonInput | ConvertFrom-Json # 获取answers节点的内容 $answers = $jsonObject.answers # 遍历answers中的所有条目(支持多个数字键的情况,比如"1"、"2"等) $csvData = foreach ($entryProp in $answers.PSObject.Properties) { # 获取当前条目对应的对象 $entry = $entryProp.Value # 构建CSV需要的字段,按需调整 [PSCustomObject]@{ "格式化全名" = $entry.prettyFormat "名字" = $entry.answer.first "姓氏" = $entry.answer.last "字段名称" = $entry.name "字段显示文本" = $entry.text } } # 导出到CSV文件(可以修改路径和编码) $csvData | Export-Csv -Path "姓名数据.csv" -NoTypeInformation -Encoding UTF8
关键知识点说明
- 处理数字属性名:因为
answers下的键是"1",直接用$answers.1会语法错误,要么用$answers.'1'直接访问,要么用$answers.PSObject.Properties遍历所有属性(适合有多个类似键的场景)。 - 构建CSV结构:用
[PSCustomObject]定义CSV的列和对应值,这样导出的CSV会有清晰的表头和数据行。 - 原始代码的错误修正:
- 把
foreach($i in $.Answers.1)改成foreach($entryProp in $answers.PSObject.Properties)(或foreach($i in $answers.'1')如果只有一个键) - 把
$1 = $._prettyFormat改成$i.prettyFormat,同时建议不要用$1这种数字开头的变量名,换成更有意义的名字比如$formattedName
- 把
运行上面的代码后,你会得到一个包含指定字段的CSV文件,完美实现从嵌套JSON到CSV的转换~
备注:内容来源于stack exchange,提问作者Mandavali
相关产品推荐
相关产品推荐

