我正在构建一个脚本来修复SQLite数据库.其中一个字段包含一个相当大的字符串,其中包含一个JSON struct .

在该 struct 中,有一个构建如下的"项目"数组:

    ...
    },
    "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方面的专家,所以我不知道我可以获得和使用哪些对象或对象array.

如何找到我需要的项并迭代所有这些项?

推荐答案

在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-Object cmdlet指定的条件筛选Items数组,并将筛选的项目存储在$filteredItems变量中.

接下来,我们使用foreach循环迭代筛选出的项,并将location属性更新为所需的值.最后,我们使用ConvertTo-Json将修改后的对象转换回JSON字符串并输出修改后的JSON字符串.

请注意,您应该将"new_location_value"替换为要为Location属性设置的实际值.

此脚本应该可以帮助您找到所需的项,并遍历它们以编辑Location属性.

Json相关问答推荐

服务器不返回JSON

如何形成正确的JQ表达式以从JSON文件中获得准确的输出数据?

集成wix.comstore API|变音符号问题

震动范围改善

使用 jq 工具将文本从 txt 文件转换为 json

Jolt 变换 - 如何用字段值重命名字段?

ORA-01422: 精确提取返回的行数超过了与 json 对象组合的请求数

如何在 powerapps 中将详细信息表单转换为 json?

使用 Jolt 变换将平面 json 转换为具有多个数组的嵌套 Json

为什么在我们有 json_encode 时使用 CJSON 编码

如何找出实际安装了哪个版本的 bower 包?

.NET CORE 3 升级 CORS 和 Json(cycle) XMLHttpRequest 错误

如何从Typescript 中的json响应中获取日期对象

如何使用 Jackson 定义可选的 json 字段

使用 gson 反序列化对象的特定 JSON 字段

如何使用 Jackson 重命名 JSON 序列化中的根键

jQuery fullcalendar 发送自定义参数并使用 JSON 刷新日历

[__NSCFNumber 长度]:发送到实例 UITableView 的无法识别的 Select 器

从调试器获取 IntelliJ Idea 中的 JSON 对象

是否有一个 PHP 函数只在双引号而不是单引号中添加斜杠