我正在通过 powershell 从json文件中读取数据,最终目的是更新该文件。我需要将数据拆分为要保留的数据块和要更新的数据块,并使问题进一步复杂化,在整个foreach循环中,需要拆分文本的位置各不相同,因此我需要将该部分来自变量。
我已经在多种配置中尝试过.split/-split
和.replace/-replace
,但似乎比在 powershell 中所假设的要难。
以下所有文件都位于同一文件夹中。
Json(json.json):
{
"Section1": {
"Heading1": [
"Thing1",
"Thing2"
]
},
"Section2": [
"Thing1",
"Thing2"
]
}
Powershell(powershell.ps1):
$originalJsonString = Get-Content -Path ".\json.json"
$SplitTarget = "Section2"
$JsonString = {This is the part that I am iffy about}
Write-Output $JsonString
我上面想要的输出是
{
"Section1": {
"Heading1": [
"Thing1",
"Thing2"
]
},
我已经尝试过与拆分和替换有关的所有想法,但是解决方案却暗示了我。
请注意,在上述解决方案中,$originalJsonString
被$ SplitTarget除而不是“ Section2”除以(或以其他方式)是一个重要因素,因为这也是我的等式中的一个因素。
这是我第一次问,所以如果我做错了事,我表示歉意。
谢谢。
编辑: 公平的是,我添加了我不转换为对象的原因。 当我将json转换为对象并返回时,powershell导出的语法是我所不希望的。 但是,如果仅使用对象,并且无法进行纵切,则必须找到其他解决方案。 谢谢。
编辑: 如果要使用对象,那么我最终找到了一种更复杂的方法来按照自己的方式格式化.json。 谢谢大家。
答案 0 :(得分:2)
您应该做的是使用来读取json文件:
$json = Get-Content .\json.json -raw | ConvertFrom-Json
我在这里使用'here-string'伪造了它:
$json = @"
{
"Section1": {
"Heading1": [
"Thing1",
"Thing2"
]
},
"Section2": [
"Thing1",
"Thing2"
]
}
"@ | ConvertFrom-Json
下一步,定义您要保留或更新的内容:
$sectionToKeep = "Section1"
$sectionToUpdate = "Section2"
要查看其中的内容,请使用$json.$sectionToKeep | ConvertTo-Json
{ "Heading1": [ "Thing1", "Thing2" ] }
接下来,更新$ section2,其他所有内容均保持不变。我正在写一个存储数组的对象,就像在$sectionToKeep
中一样:
$json.$sectionToUpdate = @{'Heading2' = 'Thing3', 'Thing4'}
最后输出(或写回文件)新的完整json:
$json | ConvertTo-Json
使用您的示例可以为您提供:
{ "Section1": { "Heading1": [ "Thing1", "Thing2" ] }, "Section2": { "Heading2": [ "Thing3", "Thing4" ] } }
希望有帮助
答案 1 :(得分:1)
不确定是否真的了解您的问题,但是我会将Json转换为对象,然后过滤子数据并再次创建文件
$obj = Get-Content json.json -raw | ConvertFrom-Json
答案 2 :(得分:0)
如果您只想隔离一个部分并创建一个新的json文件,则可以使用以下内容:
$file = Get-Content .\json.json | ConvertFrom-Json
$file | Select-Object Section1 | ConvertTo-Json | Set-Content New.json