在powershell中从json转换为csv
这是我的csv:在powershell中从json转换为csv,json,powershell,csv,scripting,Json,Powershell,Csv,Scripting,这是我的csv: "name,data Play,http://{gho}.domain.com/ BDomain,domain.com Charts,2 Compress,0 CompressJ,0" | ConvertFrom-Csv | ConvertTo-Json 给我: [ { "name": "Play", "data": "http://{gho}.domain.com/
"name,data
Play,http://{gho}.domain.com/
BDomain,domain.com
Charts,2
Compress,0
CompressJ,0" | ConvertFrom-Csv | ConvertTo-Json
给我:
[
{
"name": "Play",
"data": "http://{gho}.domain.com/"
},
{
"name": "BDomain",
"data": "domain.com"
},
{
"name": "Charts",
"data": "2"
},
{
"name": "Compress",
"data": "0"
},
{
"name": "CompressJ",
"data": "0"
}
]
我现在想从我的json中获取csv,但是| ConvertFrom json | ConvertTo csv链不起作用,我很好奇为什么不起作用?ConvertFrom json的输出是一个数组在管道中传递。这是
convertfromjson
如何编写输出的结果。它可能在一个Write Output
命令(隐式或其他)中收集所有内容并输出数组,而不是在创建对象时将每个对象流式传输到管道中。这可能是cmdlet编写方式的结果,可能是必要的
您当前的代码可能会生成csv,如:
"Count","Length","LongLength","Rank","SyncRoot","IsReadOnly","IsFixedSize","IsSynchronized"
"5","5","5","1","System.Object[]","False","True","False"
这些是数组的属性,而不是数组中的对象。一种解决方法是将数据放入变量中:
$Json = "name,data
Play,http://{gho}.domain.com/
BDomain,domain.com
Charts,2
Compress,0
CompressJ,0" |
ConvertFrom-Csv |
ConvertTo-Json
# Now you can convert back to csv without issue:
$Json = $Json | ConvertFrom-Json
$Json | ConvertTo-Csv -NoTypeInformation
注意:如果您直接发送$Json,比如$Json | ConvertFrom Json | ConvertTo Csv…
,您可能会遇到同样的问题
在Json对象上迭代似乎也能起作用:
$Json = "name,data
Play,http://{gho}.domain.com/
BDomain,domain.com
Charts,2
Compress,0
CompressJ,0" |
ConvertFrom-Csv |
ConvertTo-Json
$Json |
ConvertFrom-Json |
ForEach-Object{ $_ } |
ConvertTo-Csv -NoTypeInformation
多亏了@notjustme,您可以使用(…)
来缩短这一时间,如:
($json | ConvertFrom-Json) | ConvertTo-Csv
注:根据更正
所有这些选项本质上都是将数组放在管道前面,以绕过convertfromjson
同样,我不能100%确定ConvertFrom Json为什么会这样。当我找到一个更正式的解释时,我会更新更多的信息。convertfromjson的输出是一个数组在管道中传递。这是
convertfromjson
如何编写输出的结果。它可能在一个Write Output
命令(隐式或其他)中收集所有内容并输出数组,而不是在创建对象时将每个对象流式传输到管道中。这可能是cmdlet编写方式的结果,可能是必要的
您当前的代码可能会生成csv,如:
"Count","Length","LongLength","Rank","SyncRoot","IsReadOnly","IsFixedSize","IsSynchronized"
"5","5","5","1","System.Object[]","False","True","False"
这些是数组的属性,而不是数组中的对象。一种解决方法是将数据放入变量中:
$Json = "name,data
Play,http://{gho}.domain.com/
BDomain,domain.com
Charts,2
Compress,0
CompressJ,0" |
ConvertFrom-Csv |
ConvertTo-Json
# Now you can convert back to csv without issue:
$Json = $Json | ConvertFrom-Json
$Json | ConvertTo-Csv -NoTypeInformation
注意:如果您直接发送$Json,比如$Json | ConvertFrom Json | ConvertTo Csv…
,您可能会遇到同样的问题
在Json对象上迭代似乎也能起作用:
$Json = "name,data
Play,http://{gho}.domain.com/
BDomain,domain.com
Charts,2
Compress,0
CompressJ,0" |
ConvertFrom-Csv |
ConvertTo-Json
$Json |
ConvertFrom-Json |
ForEach-Object{ $_ } |
ConvertTo-Csv -NoTypeInformation
多亏了@notjustme,您可以使用(…)
来缩短这一时间,如:
($json | ConvertFrom-Json) | ConvertTo-Csv
注:根据更正
所有这些选项本质上都是将数组放在管道前面,以绕过convertfromjson
同样,我不能100%确定ConvertFrom Json为什么会这样。当我找到更正式的解释时,我将更新更多信息。以简洁的摘要和跨版本的视角补充:
- 在PowerShell[Core]v7+中,不需要额外的工作:将
添加到您的代码中即可正常工作|ConvertFrom Json | ConvertTo Csv
- 在Windows PowerShell和PowerShell[Core]v6.x中,您需要强制枚举
的输出,以便ConvertFrom Json
正常工作,因为与PowerShell的通常行为相反,ConvertTo Csv
整体输出Json数组,作为管道的单个对象ConvertFrom Json
- 这是一个事实,这种行为是不寻常的,促使v7+的变化-请参阅背景信息
- 强制枚举的最简单方法是使用
,即将整个数组/集合的输出元素逐个发送到管道(…)
“名称”、“数据”
“播放”,“http://{gho}.domain.com/”
“b域名”,“domain.com”
“图表”,“2”
“压缩”、“0”
“CompressJ”、“0”
以简洁的摘要和跨版本的视角作为补充:
- 在PowerShell[Core]v7+中,不需要额外的工作:将
添加到您的代码中即可正常工作|ConvertFrom Json | ConvertTo Csv
- 在Windows PowerShell和PowerShell[Core]v6.x中,您需要强制枚举
的输出,以便ConvertFrom Json
正常工作,因为与PowerShell的通常行为相反,ConvertTo Csv
整体输出Json数组,作为管道的单个对象ConvertFrom Json
- 这是一个事实,这种行为是不寻常的,促使v7+的变化-请参阅背景信息
- 强制枚举的最简单方法是使用
,即将整个数组/集合的输出元素逐个发送到管道(…)
“名称”、“数据”
“播放”,“http://{gho}.domain.com/”
“b域名”,“domain.com”
“图表”,“2”
“压缩”、“0”
“CompressJ”、“0”
这是一个重复引用:该问题中的文件不存在,因此我不确定其格式,但将对其进行研究,谢谢。在尝试获取“results”属性时,ps抛出的结果无法找到,如果只执行标准的| convertfrom json | convertto csv,它将返回一些格式化为csv@tawfikboujeh,这里的问题是ConvertFrom Json
的v7之前的非枚举行为,在链接问题的解决方案中,顺便说一句,它被绕过了,访问属性隐式地导致枚举。这是重复的引用:该问题中的文件不存在,因此我不确定格式,但将研究它,谢谢。当尝试获取“results”属性时,ps抛出的结果无法找到,如果只执行标准的| convertfrom json | convertto csv,它将返回一些格式为csv@tawfikboujeh,这里的问题是convertfromjson
的v7之前的非枚举行为,顺便说一句,在解决相关问题的过程中忽略了这一点