Powershell:如何找到所有包含一对特定key:value的JSON对象并迭代所有这些对象?

njthzxwz  于 2023-06-25  发布在  Shell
关注(0)|答案(1)|浏览(111)

我正在构建一个脚本来修复SQLite数据库。其中一个字段包含一个相当大的字符串,其中包含JSON结构。
在结构内部,有一个像这样构建的“items”数组:

...
    },
    "items": [
      {
        "id": 001,
        "Model": {
          "modelname": "Model1"
        },
        ...
        "location": null,
        ...
      },
      {
        "id": 002,
        "Model": {
          "modelname": "Model2"
        },
        ...
        "location": "1020",
        ...
      },
      {
        "id": 003,
        "Model": {
          "modelname": "Model3"
        },
        ...
        "location": null,
        ...
      },
      ...
    ],

我需要的是找到所有带有"location": null而不是"modelname": "Model3"的项目(所以,在这个例子中,我只得到带有"id": 001的项目),然后迭代它们以编辑“location”属性。
我不是PowerShell的Maven,所以我不知道我可以获得和使用什么对象或对象数组。
我如何找到我需要的项目并迭代所有这些项目?

lawou6xi

lawou6xi1#

在PowerShell中,您可以使用ConvertFrom-Json cmdlet将JSON字符串转换为对象,然后使用PowerShell的数组筛选和迭代功能来实现目标。下面是一个示例脚本,演示了如何实现这一点:

# Assuming you have the JSON string stored in a variable called $jsonString
    $jsonString = '{
      "items": [
        {
          "id": 1,
          "Model": {
            "modelname": "Model1"
          },
          "location": null
        },
        {
          "id": 2,
          "Model": {
            "modelname": "Model2"
          },
          "location": "1020"
        },
        {
          "id": 3,
          "Model": {
            "modelname": "Model3"
          },
          "location": null
        }
      ]
    }'
    
    # Convert the JSON string to an object
    $jsonObject = $jsonString | ConvertFrom-Json
    
    # Filter the items based on the conditions you specified
    $filteredItems = $jsonObject.items | Where-Object { $_.location -eq $null -and $_.Model.modelname -ne "Model3" }
    
    # Iterate over the filtered items and update the "location" property
    foreach ($item in $filteredItems) {
      $item.location = "new_location_value"
    }
    
    # Convert the modified object back to JSON
    $modifiedJsonString = $jsonObject | ConvertTo-Json
    
    # Output the modified JSON string
    Write-Host $modifiedJsonString

在此脚本中,我们首先使用ConvertFrom-Json将JSON字符串转换为对象,并将其存储在$jsonObject变量中。然后,我们根据您使用Where-Objectcmdlet指定的条件筛选项数组,并将筛选后的项存储在$filteredItems变量中。
接下来,我们使用foreach循环迭代过滤后的项,并将location属性更新为所需的值。最后,我们使用ConvertTo-Json将修改后的对象转换回JSON字符串,并输出修改后的JSON字符串。
请注意,您应该将“new_location_value“替换为您要为location属性设置的实际值。
这个脚本应该可以帮助您找到所需的项,并迭代这些项来编辑location属性。

相关问题