gpt4 book ai didi

json - Powershell:递归复制 JSON 属性

转载 作者:行者123 更新时间:2023-12-02 23:19:51 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的 powershell 脚本来获取 file1.json 中的键/值列表,并从 file2.json 更新这些键的值

我遇到的问题是那些可以嵌套的属性,我不知道键的名称。可能有任何嵌套深度,因此可能需要一个递归函数来迭代和搜索这些?

我可以遍历 PSCustomObject 以获取键列表,但是当它进入嵌套部分时我很挣扎。任何帮助都会很棒!

使用 PS v5

更新:它还需要添加未找到的 key

最佳答案

试试这个(Powershell v3+)。这个想法是首先读取两个 JSON 文件,在内存中进行比较,然后再次将第二个(更新的)JSON 导出到文件。

# function to copy JSON properties from source to target
# obj1: source object
# obj2: target object
# (values will be copied,
# missing properties will be added,
# extra properties will be left untouched)
function Copy_Keys ($obj1, $obj2) {
# loop properties of source object
foreach ($property1 in $obj1.PSObject.Properties) {
$key = $property1.Name
$value1 = $property1.Value
$property2 = $obj2.PSObject.Properties.Item($key)
# check if property exists in target object
if ($null -ne $property2) {
$value2 = $property2.Value
# if both values are objects: compare recursively
if ($value1 -is [PSObject] -and $value2 -is [PSObject]) {
Copy_Keys $value1 $value2
}
# else simply copy the value
else {
$obj2.$key = $value1
}
}
# property does not exist: add it
else {
$obj2 | Add-Member -Type NoteProperty -Name $key -Value $value1
}
}
}

# Read JSON from source(s)
$obj1 = Get-Content "file1.json" | ConvertFrom-Json
$obj2 = Get-Content "file2.json" | ConvertFrom-Json

# Copy the properties
Copy_Keys $obj1 $obj2

# Update file2 by re-exporting the JSON
$obj2 | ConvertTo-Json | Out-File "file2.json"

关于json - Powershell:递归复制 JSON 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54400061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com