【发布时间】:2021-07-31 18:22:01
【问题描述】:
我有一个 JSON 文件,我想在其中用占位符替换几个值。 所以我用要替换的参数制作了一个.csv。 line[0](如果存在)是文件中的路径,line[1] 是元素,line[2] 是占位符。
journeys.legs.origin.properties.downloads;url;placeholder;
;url;placeholder;
download;url;placeholder;
;psFileName;placeholder;
;serverTime;placeholder;
;calcTime;placeholder;
现在我定义了以下函数,以获取文件、读取 csv 并替换内容。
$storage = "D:\Service\test.json"
$parameters2replace = "D:\Service\parameters2replace.csv"
function Get-JSONProperty([object] $InputObject, [string] $Property) {
$path = $Property -split '\.'
$obj = $InputObject
$path | %{ $obj = $obj.$_ }
$obj
}
function setParameter(){
foreach ($parameter in Get-Content $parameters2replace){
$line=$parameter.split(";")
$path = $line[0]
$elementName = $line[1]
$newValue = $line[2]
replaceElement $path $elementName $newValue
}
}
function replaceElement($path, $elementName, $newValue){
ForEach($JSONPath in Get-JSONProperty $JSON $path){
if (!$line[0]){
if($JSON.$elementName){
$JSON.$elementName = $newValue
}
}
else{
if($JSON.$path.$elementName){
echo $JSON.$path.$elementName
$JSON.$path.$elementName = $newValue
}
}
}
$JSON | ConvertTo-Json -depth 32| set-content $storage
}
$JSON = Get-Content $storage -raw | ConvertFrom-Json
setParameter
我现在的问题是,以下 if 参数不适用于 $path 变量。如果我把它硬编码,它工作得很好。
if($JSON.$path.$elementName)
我希望我能把一切都说清楚,这是我的第一篇文章。
【问题讨论】:
标签: json powershell csv