PowerShell 学习笔记:操作JSON文件

PowerShell 学习笔记:操作JSON文件_第1张图片

JSON文件(字符串)是有一定格式要求的文本文件。

百度百科
JSON JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript (European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

一、JSON样例文件

文件位于:xxx\Delphi_Project.json

{
    "Version": "1.0.0.0",
    "MainIcon": "C:\\Users\\Sen\\myIcon.png",
    "PlatForm": "VCL"
}

二、创建PowerShell操作JSON的文件

文件位于:xxx\PowerShell_JSON.ps1

    • 读取JSON文件
  1. 分步读取JSON文件

#1. 定义需要读取的json文件
$Path = ‘Delphi_Project.json’ 
    # Write-Host 'json文件: ' + $Path -ForegroundColor Green #将内容再控制台打印出来
#2. 获取json文件内容
$json_file = Get-Content  -Raw -Path $Path
#3. 将json文件内容读取出来,拼接成一个字符串
$json_str = ''
foreach($line in $json_file)
{
    $json_str = $json_str + $line
    # Write-Host $line -ForegroundColor Green  #将内容再控制台打印出来
}
#4. 将json_str 转换成PowerShell的对象
$json_data = ConvertFrom-Json $json_str 
#5. 使用PowerShell对象获取josn对象的值
$json_data.Version
$json_data.MainIcon
$json_data.PlatForm
  1. 集成(简化)读取JSON文件

$Path = ‘Delphi_Project.json’  #文件名称
$json_data = Get-Content  -Raw -Path $Path | ConvertFrom-Json
$json_data.Version
$json_data.MainIcon
$json_data.PlatForm 
  1. 以上代码执行结果

1.0.0.0
C:\Users\Sen\myIcon.png
VCL

    • 修改写入JSON文件
# 首先可以随意修改JSON 上面读取到对象
#1. 修改已经存在的值
$json_data.PlatForm = 'FMX'
#2. 增加一个新字段ID,首先判断字段是否存在,如果已经存在,然后还增加就会出现错误
if(!$json_data.psobject.properties.match('ID').Count){
   # 如果不存在就增加
   $json_data | Add-Member -MemberType NoteProperty -Name ID -Value 'sensor'
}else{
   # 如果存在就可以进行修改 
   $json_data.ID = 'wu'
}
#3. 删除一个字段
$json_data.psobject.properties.remove('ID')

#1. 将PowerShell的对象转换成JSON字符串
$json_str = ConvertTo-Json  -Depth 10 $json_data
#2. 将修改后的json字符串回写到文件中,这里当然可以更换为其他的文件名称
Set-Content -Path "$path" -Value $json_str

# 以上两句的管道渐简便写法
# $json_data | ConvertTo-Json -depth 10 | Set-Content -Path $Path

三、总结

  1. PowerShell将JSON转换成了 PSCustomObject 对象,关于 PSCustomObject 对象参见

  1. PSCustomObject 对象操作有其自己规范,字段名不能重名,所以新增加字段必须先判断是否存在

  1. 如果给一个不存在的字段直接赋值也会引发错误,所以除非明确存在,否则也需要判断是否存在

本文参考文档:

  • 如何使用powershell操作json对象 - 码农教程 (manongjc.com)

  • 关于 PSCustomObject 的各项须知内容 - PowerShell | Microsoft Learn

今天是2023年大年初五,祝愿大家新的一年事业有成,学业进步,开心喜乐!

你可能感兴趣的:(工具,powershell,json,json,powershell)