You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本增强:提取JSON中RatedOI关联的前置ID值

解决PowerShell提取JSON中RatedOI对应实体ID的问题

问题说明

现有PowerShell脚本可正确提取JSON文件中的RatedOI布尔值及上下文,但需要增强功能:捕获与RatedOI同属一个实体的前置ID值(该ID为含4个连字符的36位唯一字符串)。由于ID与RatedOI之间的行数不固定,当前脚本会提取所有ID导致输出冗长带省略号,需修正为仅获取RatedOI所属实体对应的ID。

现有脚本示例

假设现有脚本通过文本匹配逐行处理,会提取所有ID和RatedOI值,但无法关联二者的对应关系:

# 现有脚本
$content = Get-Content -Path "data.json"
$allIds = $content | Select-String -Pattern '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' | ForEach-Object { $_.Matches.Value }
$ratedOIMatches = $content | Select-String -Pattern '"RatedOI": (true|false)' | ForEach-Object { $_.Matches.Groups[1].Value }

Write-Host "所有ID: $($allIds -join ', ')"
Write-Host "RatedOI值: $($ratedOIMatches -join ', ')"

JSON示例

[
    {
        "id": "123e4567-e89b-12d3-a456-426614174000",
        "name": "Entity A",
        "details": {
            "description": "Sample entity with nested properties",
            "tags": ["foo", "bar"]
        },
        "RatedOI": true
    },
    {
        "id": "987e6543-e21b-43c2-d109-876543210987",
        "name": "Entity B",
        "RatedOI": false
    },
    {
        "id": "abc123de-f456-7890-ghij-klmnopqrstuv",
        "name": "Entity C",
        "metadata": {
            "created": "2024-01-01"
        },
        "RatedOI": true
    }
]

修正后的脚本

以下脚本通过逐行遍历跟踪最近的实体ID,确保RatedOI与所属实体的ID准确关联,避免冗余输出:

# 修正后的脚本
$jsonPath = "data.json"
$content = Get-Content -Path $jsonPath
$currentId = $null
# 匹配36位带连字符的UUID正则
$uuidPattern = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
# 匹配RatedOI布尔值的正则
$ratedOIPattern = '"RatedOI": (true|false)'

foreach ($line in $content) {
    # 匹配实体ID,更新当前跟踪的ID
    $idMatch = [regex]::Match($line, $uuidPattern)
    if ($idMatch.Success) {
        $currentId = $idMatch.Value
    }

    # 匹配RatedOI,输出对应的ID、值及上下文
    $ratedOIMatch = [regex]::Match($line, $ratedOIPattern)
    if ($ratedOIMatch.Success -and $null -ne $currentId) {
        $ratedOIValue = $ratedOIMatch.Groups[1].Value
        Write-Host "实体ID: $currentId"
        Write-Host "RatedOI值: $ratedOIValue"
        
        # 提取上下文:输出当前行前后各2行内容
        $lineIndex = $content.IndexOf($line)
        $startIndex = [math]::Max(0, $lineIndex - 2)
        $endIndex = [math]::Min($content.Count - 1, $lineIndex + 2)
        $contextLines = $content[$startIndex..$endIndex] -join "`n"
        Write-Host "上下文内容:`n$contextLines"
        Write-Host "---"
    }
}

脚本说明

  • 核心逻辑:逐行遍历过程中持续跟踪最近出现的实体UUID,当匹配到RatedOI时,直接使用当前跟踪的ID,确保二者同属一个实体。
  • 适配行数不固定的场景:无论ID与RatedOI之间隔多少行,只要属于同一个实体(JSON对象内),就能准确关联。
  • 上下文提取:默认输出RatedOI行前后各2行内容,可根据需求调整$startIndex和$endIndex的偏移量。
  • 灵活适配:如果实体ID的键名不是"id",只需修改正则表达式(例如'"entityUuid": "([0-9a-f-]{36})"')即可适配不同JSON结构。

内容的提问来源于stack exchange,提问作者BigSmooth82

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 12:56:08