PowerShell一句话实现json转csv文件

该文介绍如何利用PowerShell命令行工具将包含数组对象的JSON文件转换成CSV格式。具体步骤包括使用Get-Content读取JSON文件,ConvertFrom-Json解析JSON,通过管道操作选择并展开所需属性,最后用ConvertTo-Csv和Out-File生成CSV文件。

一、参考资料

How to convert JSON file to CSV file using PowerShell

二、问题描述

将json文件中的数组对象转换为csv文件。

三、json样例文件

来自json.org的例子

{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

四、一句话命令

PS D:\jsontocvs>Get-Content .\menu.json | ConvertFrom-Json | select -ExpandProperty menu | select -ExpandProperty popup | select -expandproperty menuitem | select -Property onclick,value | ConvertTo-Csv | Out-File menu.csv

样例文件命名为:menu.json

Get-Content 获取json文件内容,"|"代表管道,意思是将当前命令结果传递到下个命令,ConvertFrom-Json形成内部对象,select用ExpandProperty参数选择menu属性对应的复杂对象,再依次选择popup、menuitem复杂对象,最终选择onclick,value属性(用于展示可以调整两者输出的顺序),ConvertTo-Csv转换为Csv格式,Out-File 输出到文件menu.csv。结果如下:

"onclick","value"
"CreateNewDoc()","New"
"OpenDoc()","Open"
"CloseDoc()","Close"

### CSV文件特点 CSV(Comma-Separated Values)作为数据存的种常用格式,有特定的实现规则。文件以“行”为单位,开头不能留空。文件可含或不含列名,若有列名则位于第行。行数据不能跨行,行与行间不可存在空行。以英文半角逗号作为分隔符,若列为空,也要表达空列的存在。列内容若存在英文半角单引号,则替换成半角双引号义,在文件读写时,引号和逗号操作规则可以互逆。编码格式不作限制,可以是ASCII、Unicode或者UTF8等,但不支持数字或特殊字符[^4]。 ### JSON文件特点 JSON(JavaScript Object Notation)是种轻量级的数据交换格式。它基于JavaScript的个子集,采用完全独立于编程语言的文本格式来存储和表示数据。具有良好的可读性和可扩展性,易于人阅读和编写,同时也易于机器解析和生成。JSON数据以键值对的形式组织,支持嵌套结构,能很好地表示复杂的数据关系。 ### CSV文件JSON文件的区别 - **数据结构**:CSV种简单的表格型数据格式,主要用于存储二维表格数据;而JSON可以表示更复杂的数据结构,支持嵌套的对象和数组,适合表示多层次的数据关系。 - **可读性**:CSV文件对于简单的数据表格来说,可读性较好,但对于复杂的数据结构,理解起来较为困难;JSON文件具有较好的层次结构,对于复杂数据的展示和理解更直观。 - **数据类型支持**:CSV文件本身不区分数据类型,所有数据都被视为文本;JSON支持多种数据类型,如字符串、数字、布尔值、数组、对象等。 ### CSV文件JSON文件的相互换方法 #### CSVJSON 借助vscode+Fitten可以快速开发并测试通过,用powershell代码来完成这个功能: ```powershell function Convert-CsvToJson { param ( [string]$csvPath, # CSV 文件路径 [string]$jsonPath # JSON 文件路径 ) # 从 CSV 文件导入数据(指定 UTF-8 编码) $csvData = Import-Csv -Path $csvPath -Encoding UTF8 # 将 CSV 数据换为 JSON 格式 $jsonData = $csvData | ConvertTo-Json # 将 JSON 数据保存到文件(指定 UTF-8 编码) $jsonData | Out-File -FilePath $jsonPath -Encoding UTF8 Write-Host "CSV 文件 $csvPath 已成功换为 JSON 并保存为 $jsonPath" } ``` #### JSONCSV ```powershell function Convert-JsonToCsv { param ( [string]$jsonPath, # JSON 文件路径 [string]$csvPath # CSV 文件路径 ) # 读取 JSON 文件内容 $jsonContent = Get-Content -Path $jsonPath -Encoding UTF8 | Out-String # 将 JSON 换为 PowerShell 对象 $data = $jsonContent | ConvertFrom-Json # 将 PowerShell 对象导出为 CSV 文件(指定 UTF-8 编码) $data | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8 Write-Host "JSON 文件 $jsonPath 已成功换为 CSV 并保存为 $csvPath" } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值