【问题标题】:Powershell convertfrom-json | convertto-csvPowershell convertfrom-json |转换为 csv
【发布时间】:2015-08-09 16:32:08
【问题描述】:

我有一个JSON数据结构如下(这里可能有一些错误,我使用的数据很好):

[{
"id": 12345,
"itemName": "some string",
"sellerId": 123,
"seller": "",
"categoryId": ,
"categoryPath": [
  {
   //more data
  },
  {
   //more data
  }
]}, 
{"id": 12346,
"itemName": "some other string",
"sellerId": 234,
"seller": "",
"categoryId": ,
"categoryPath": [
  {
   //more data
  },
  {
   //more data
  }
]
}]

我想将其转换为 csv,以便选定的属性名称成为 csv 标题,并且它们的值(仅限深度 1)成为数据。 例如

id,itemName,sellerId
12345,"some string",123
12346,"some other string",234

我已经尝试过使用数百种变体

cat file.json | convertfrom-json | convertto-csv

但没有一个有效。我得到的只是带有对象名称/类型的 csv 数据,我不知道如何使它仅使用 json 数据中每个对象的选定属性。

【问题讨论】:

  • 没什么大不了的,但您的输入数据与您的示例输出不匹配。
  • 感谢您指出这一点,我已使示例输出与输入数据匹配。
  • 我无法一行完成。这对你有用吗? $converted = Get-Content file.json -raw | ConvertFrom-Json;$converted | Select id,itemName,sellerId | Convertto-CSV -NoTypeInformation。由于某种我还不知道的原因,需要首先将结果保存到变量中。之后工作。
  • 我无语了。它起作用了,我什至想出了如何用它来制作oneliner。似乎在 iwr 和 convertfrom-json 周围加上括号可以解决问题。我认为这可能与 Powershell 处理对象的方式有关。无论如何,下面是有效的命令。 (iwr "url" | convertfrom-json) | select id, itemname | convertto-csv -NoTypeInformation
  • 是的......我知道我的问题是什么......现在回答。

标签: json powershell csv


【解决方案1】:

简而言之,您需要执行以下操作:

(Get-Content file.json -Raw | ConvertFrom-Json) | Select id,itemName,sellerId | Convertto-CSV -NoTypeInformation

第一个问题是Get-Content 将单独的行传递给ConvertFrom-Json,这不是它想要的。使用-Raw 开关完全通过它。

(Get-Content file.json -Raw | ConvertFrom-Json) 需要放在括号中,因为这样我们才能继续使用管道。如果不这样做,则无法访问这些属性。看起来它正在尝试将整个对象而不是其各个部分传递到管道中。

-NoTypeInformation 删除这样的行

#TYPE Selected.System.Management.Automation.PSCustomObject

【讨论】:

  • 谢谢...这真的很有帮助。
  • 最后我添加了导出到 csv。 (获取内容文件.json -Raw | ConvertFrom-Json)|选择 id,itemName,sellerId |转换为 CSV -NoTypeInformation |设置内容文件.csv
猜你喜欢
  • 2018-03-18
  • 2015-08-23
  • 2014-11-18
  • 2021-12-19
  • 2021-03-31
  • 2017-09-18
  • 2017-09-21
  • 2021-01-08
  • 1970-01-01
相关资源
最近更新 更多