Powershell-Update.JSON

Powershell-Update.JSON,json,powershell,Json,Powershell,我需要一些关于如何更新.json文件中的值的指针。下面是我的一个示例fruits.json: [ { "ExpireDate": "", "Origin": "", "FruitName": "Apple" }, { "Expiredate": "

我需要一些关于如何更新.json文件中的值的指针。下面是我的一个示例fruits.json:

   [
    {
        "ExpireDate":  "",
        "Origin":  "",
        "FruitName":  "Apple"
    },
    {
        "Expiredate":  "",
        "Origin":  "",
        "FruitName":  "Orange"
    }
    ]
我有另一个.JSON文件,名为fruitdetail.JSON,作为输入文件。我需要用来自fruitdetail.json的信息更新上面的fruits.json。基本上,从fruitdetail.json中查找“水果名称”,并更新fruits.json中的“Origin”和“Expire date”键。下面是我开始的内容,但看起来不太对劲

$fruits = (Get-Content -Path "C:\temp\fruits.json" | ConvertFrom-Json)
$fruitDetail = (Get-Content -Path "C:\temp\fruitdetail.json" | ConvertFrom-Json)

$json = foreach ($fruit in $fruits) {
    If ($fruit.FruitName = $fruitDetail.FruitName) {
        $Fruit.Origin = $FruitDetail.Origin
        $Fruit.ExpireDate = $FruitDetail.ExpireDate
    }
}

$json.update
提前谢谢


更新:更新了上述代码

您试图使用公共字段关联数据,类似于SQL联接。在本例中,可以使用中的水果名称进行演示。不确定这是否完美,但它应该展示出这个概念

# Establish Test Date
$JSON_Fruit =
@"
[
{
    "Expire Date":  "",
    "Origin":  "",
    "Fruit Name":  "Apple"
},
{
    "Expire date":  "",
    "Origin":  "",
    "Fruit Name":  "Orange"
}
]
"@  | 
ConvertFrom-Json

# Establish Test Date
$JSON_FruitDetail = @{}
(@"
[
{
    "Expire Date":  "10/27/2020",
    "Origin":  "California",
    "Fruit Name":  "Apple"
},
{
    "Expire date":  "11/10/2020",
    "Origin":  "Arizona",
    "Fruit Name":  "Orange"
}
]
"@ | 
ConvertFrom-Json) |
ForEach-Object{
    $JSON_FruitDetail.Add( $_.'Fruit Name', $_ )
}


ForEach( $Fruit in $JSON_Fruit )
{    
    $Fruit."Expire Date" = $JSON_FruitDetail[$Fruit.'Fruit Name']."Expire Date"
    $Fruit.Origin        = $JSON_FruitDetail[$Fruit.'Fruit Name'].Origin
}

$JSON_Fruit
注意:括号用于避免PowerShell 7+中7之前的PowerShell版本(包括Windows和Core)出现问题,您不需要使用它们。有关更多信息,请参阅和

基本上,您是通过
convertfromjson
将JSON转换为PSCustom对象。然后将数据的一侧存储在键入公共字段的字典集合中,在本例中为“水果名”。然后,我们使用“水果名”在对象集合中循环,以引用哈希表中的条目,并对目标对象的属性进行赋值


注意:我在社区中看到了许多名为Join Object的PowerShell函数,它们可能也适用于此,但我通常使用上述技术。

听起来像是学校预约。到目前为止你研究了什么?更新了原始代码。正在考虑使用foreach,但不确定从那里去哪里。谢谢Steve。这给了我一个很好的想法,从这里去哪里。