如何修改PowerShell代码:仅返回含RatedOI的Operator实体数据
问题:筛选同时包含Operator类型和RatedOI字段的实体
当前PowerShell程序遍历JSON文件的entitiesData.Entities集合,筛选entityType为"Operator"的实体并返回其id和RatedOI字段值,但存在问题:当实体是Operator但未包含RatedOI字段时,仍会返回id。需要调整为仅当实体同时为Operator且包含RatedOI字段时,才返回对应的id和RatedOI值。
输出对比
预期输出
id RatedOI ---- ------ 6fe06340-072f-49b2-8d5a-449e3db80002 False
实际输出
Id RatedOI ---- ------ 7af50dbb-7ea3-4458-adfe-a82198a80001 7af50dbb-7ea3-4458-adfe-a82198a80002 False
示例数据与现有代码
JSON结构
{"id": "e0b8a6aa-2675-4d93-86ff-6a51a0daea85", "_etag": "\"ba00b86de-0000-0100-00dd00-671029b20000", "LOB": "A", "RD": {"PSM": {}, "entities": [{}], "qid": "638ee347-42ed-441c-a6ff-d6c99cf62df55", "peakData": {}, "PDR": []}, "ASC": "Committed", "entitiesData": {"entities": [{}, {"id": "b0000000-0000-0000-0000-00000000000b", "entityType": "InsuranceHistoryUserResponse", "ordinal": 0, "characteristics": {"PBILR": {"stringValue": "XYZ"}, "PBILRC": {"stringValue": "XYZ"}, "PISR": {"stringValue": "XeYZ"}}}, {"id": "7af50dbb-7ea3-4458-adfe-a82198a80001", "entityType": "Operator", "ordinal": 0, "characteristics": {"FirstName": {"stringValue": "Joe"}, "ODLNUR": {"stringValue": "A82539878"}, "RatedOI2": {"boolValue": true}}}, {"id": "b0000000-0000-0000-0000-00000000000", "entityType": "IHUR", "ordinal": 0, "characteristics": {"PBILR": {"stringValue": "XYZ"}, "PBILRC": {"stringValue": "XYZ"}, "PISR": {"stringValue": "XYZ"}}}, {"id": "7af50dbb-7ea3-4458-adfe-a82198a80002", "entityType": "Operator", "ordinal": 0, "characteristics": {"FirstName": {"stringValue": "Joe"}, "ODLNUR": {"stringValue": "3333"}, "RatedOI": {"boolValue": false}}}]}}
现有PowerShell代码
Set-Location C:\Users\A187515\Downloads\ $file = Get-ChildItem -Path C:\Users\A187515\Downloads\ -Filter *.json | Sort-Object LastAccessTime -Descending | Select-Object -First 1 (Get-Content -Raw $file | ConvertFrom-Json) | ForEach-Object { foreach ($entity in $_.EntitiesData.Entities) { if ($entity.EntityType -eq 'Operator' -and $entity.Characteristics -isnot [array]) { $entity | Select-Object ` id, @{ Name = 'RatedOI'; Expression = { $_.characteristics.RatedOI.boolValue } } } } }
修改后的代码
Set-Location C:\Users\A187515\Downloads\ $file = Get-ChildItem -Path C:\Users\A187515\Downloads\ -Filter *.json | Sort-Object LastAccessTime -Descending | Select-Object -First 1 (Get-Content -Raw $file | ConvertFrom-Json) | ForEach-Object { foreach ($entity in $_.EntitiesData.Entities) { # 新增RatedOI字段存在性检查 if ($entity.EntityType -eq 'Operator' -and $entity.Characteristics -isnot [array] -and $null -ne $entity.characteristics.RatedOI) { $entity | Select-Object ` id, @{ Name = 'RatedOI'; Expression = { $_.characteristics.RatedOI.boolValue } } } } }
代码说明
在原有判断条件基础上,添加$null -ne $entity.characteristics.RatedOI检查,确保只有当characteristics下存在RatedOI属性时,才输出该实体的信息,直接过滤掉符合Operator类型但缺少RatedOI字段的无效记录。
内容的提问来源于stack exchange,提问作者BigSmooth82
相关产品推荐
相关产品推荐

