使用重复键遍历 JSON Powershell

时间:2021-07-26 21:54:16

标签: json powershell

我正在尝试使用 powershell 从表格形式的 json 文件中检索信息。该文件在多个级别具有相同的键值不同的值(以数组的形式)。

{
        "id": "Process_01.00.0005",
        "icsProject": {
            "version": "01.00.0005",
            "percentageComplete": 100,
            "modelType": "FREEFORM",
            "projectCode": "PROCESS",
            "processorCount": {
                "MESSAGE_TRACKER": 1,
                "TRANSFORMER": 8,
                "TYPE_DEFINITIONS": 1,
                "ASSIGNMENT": 8,
                "FOR": 1,
                "CONTENT_BASED_ROUTER": 2,
                "ACTIVITY_STREAM_LOGGER": 2,
                "SOURCE": 1,
                "TARGET": 8
            },
            "projectStyle": "App Driven Orchestration",
            "smartTags": "app:erp, app:atpdatabase, app:ftp, app:rest,style:App Driven Orchestration",
            "orchestration": {
                "type": "ORCHESTRATION",
                "activities": [
                    {
                        "type": "RECEIVE",
                        "normalizedFields": {
                            "adapterType": "TECHNOLOGY",
                            "adapterName": "REST",
                            "adapterPluginID": "rest",
                            "endpointConfigurationSummary": "Trigger OIC REST Integration: Post /ProcessPayments/",
                            "adapterEndpointConfiguration": "INBOUND",
                            "integrationOperationName": "Post",
                            "outboundInvocationOperationName": "no_data",
                            "outboundInvocationService": "no_data",
                            "outboundInvocationProtocol": "no_data",
                            "outboundInvocationConnectivityMode": "no_data",
                            "outboundInvocationAuthenticationType": "no_data",
                            "outboundInvocationTLS": "no_data",
                            "outboundInvocationOAuthProvider": "no_data",
                            "outboundInvocationInvocationStyle": "no_data",
                            "outboundInvocationFunctionalPattern": "no_data",
                            "outboundInvocationArtifactType": "no_data",
                            "outboundInvocationArtifactValue": "no_data",
                            "outboundInvocationAttachmentSupport": "no_data",
                            "outboundInvocationPaginatedRetrieval": "no_data",
                            "outboundInvocationCustomArtifact": "no_data",
                            "inboundInvocationInvocationStyle": "NOTIFICATION",
                            "inboundInvocationFunctionalPattern": "TRIGGER",
                            "inboundInvocationProtocol": "REST",
                            "inboundInvocationTLS": "1_WAY_SSL",
                            "inboundInvocationAuthenticationType": "MULTI_TOKEN",
                            "inboundInvocationConnectivityMode": "CLOUD",
                            "inboundInvocationArtifactType": "no_data",
                            "inboundInvocationArtifactValue": "/ProcessPayments/",
                            "inboundInvocationAttachmentSupport": "no_data",
                            "inboundInvocationCustomArtifact": "no_data"
                        }
                    },
                    {
                        "type": "LABEL",
                        "assignments": [
                            {
                                "type": "ASSIGNMENT",
                                "xpathExpression": "xp20:format-dateTime(string(fn:current-dateTime()),\"[Y0001]-[M01]-[D01]\")\n"
                            },
                            {
                                "type": "ASSIGNMENT",
                                "xpathExpression": "\"\""
                            },
                            {
                                "type": "ASSIGNMENT",
                                "xpathExpression": "\"\""
                            },
                            {
                                "type": "ASSIGNMENT",
                                "xpathExpression": "\"\""
                            },
                            {
                                "type": "ASSIGNMENT",
                                "xpathExpression": "\"\""
                            }
                        ]
                    },
                    {
                        "type": "TRANSFORMER",
                        "sources": [
                            "rest"
                        ],
                        "target": "atpdatabase"
                    },
                    {
                        "type": "INVOKE",
                        "normalizedFields": {
                            "adapterType": "TECHNOLOGY",
                            "adapterName": "Oracle ATP",
                            "adapterPluginID": "atpdatabase",
                            "endpointConfigurationSummary": "Execute Pure SQL Query in Oracle ATP",
                            "adapterEndpointConfiguration": "OUTBOUND",
                            "integrationOperationName": "GetRunDates_REQUEST",
                            "outboundInvocationOperationName": "no_data",
                            "outboundInvocationService": "no_data",
                            "outboundInvocationProtocol": "JDBC",
                            "outboundInvocationConnectivityMode": "CLOUD",
                            "outboundInvocationAuthenticationType": "TECHNOLOGY_CREDENTIALS",
                            "outboundInvocationTLS": "1_WAY_SSL",
                            "outboundInvocationOAuthProvider": "no_data",
                            "outboundInvocationInvocationStyle": "SYNC_REQUEST_RESPONSE",
                            "outboundInvocationFunctionalPattern": "REAL_TIME",
                            "outboundInvocationArtifactType": "PURESQL",
                            "outboundInvocationArtifactValue": "Select * from DATES WHERE RUN_DATE = #DateParam",
                            "outboundInvocationAttachmentSupport": "no_data",
                            "outboundInvocationPaginatedRetrieval": "no_data",
                            "outboundInvocationCustomArtifact": "no_data",
                            "inboundInvocationInvocationStyle": "no_data",
                            "inboundInvocationFunctionalPattern": "no_data",
                            "inboundInvocationProtocol": "no_data",
                            "inboundInvocationTLS": "no_data",
                            "inboundInvocationAuthenticationType": "no_data",
                            "inboundInvocationConnectivityMode": "no_data",
                            "inboundInvocationArtifactType": "no_data",
                            "inboundInvocationArtifactValue": "no_data",
                            "inboundInvocationAttachmentSupport": "no_data",
                            "inboundInvocationCustomArtifact": "no_data"
                        }
                    },
                    {
                        "type": "LABEL",
                        "assignments": [
                            {
                                "type": "ASSIGNMENT",
                                "xpathExpression": "concat(fn:current-time(),\" Number of Payment Runs: \", count($GetRunDates/nsmpr5:GetRunDatesOutputCollection/nsmpr5:GetRunDatesOutput),\" (\",oraext:create-delimited-string($GetRunDates/nsmpr5:GetRunDatesOutputCollection/nsmpr5:GetRunDatesOutput/nsmpr5:PAY_GROUP,\",\"),\")\")"
                            }
                        ]
                    },
                    {
                        "type": "FOR",
                        "parallel": "false",
                        "xpathExpression": "$GetRunDates/nsmpr2:GetRunDatesOutputCollection/nsmpr2:GetRunDatesOutput",
                        "activities": [
                            {
                                "type": "ROUTER",
                                "routes": [
                                    {
                                        "type": "ROUTER_ROUTE",
                                        "xpathExpression": "$CurrRecord/nsmpr2:GetRunDatesOutput/nsmpr2:CHQ_TMPL_ID = \"\"",
                                        "activities": [
                                            {
                                                "type": "ACTIVITY_STREAM_LOGGER"
                                            }
                                        ]
                                    },
                                    {
                                        "type": "ROUTER_ROUTE",
                                        "xpathExpression": "true",
                                        "activities": [
                                            {
                                                "type": "TRANSFORMER",
                                                "sources": [
                                                    "rest"
                                                ],
                                                "target": "erp"
                                            },
                                            {
                                                "type": "INVOKE",
                                                "normalizedFields": {
                                                    "adapterType": "APPLICATION",
                                                    "adapterName": "Oracle ERP Cloud",
                                                    "adapterPluginID": "erp",
                                                    "endpointConfigurationSummary": "Submit ESS Job Request in ERP Cloud",
                                                    "adapterEndpointConfiguration": "OUTBOUND",
                                                    "integrationOperationName": "SubmitESSJobRequest",
                                                    "outboundInvocationOperationName": "SubmitESSJobRequest",
                                                    "outboundInvocationService": "ErpIntegrationService",
                                                    "outboundInvocationProtocol": "SOAP",
                                                    "outboundInvocationConnectivityMode": "CLOUD",
                                                    "outboundInvocationAuthenticationType": "USERNAME_PASSWORD_TOKEN",
                                                    "outboundInvocationTLS": "1_WAY_SSL",
                                                    "outboundInvocationOAuthProvider": "no_data",
                                                    "outboundInvocationInvocationStyle": "SYNC_REQUEST_RESPONSE",
                                                    "outboundInvocationFunctionalPattern": "REAL_TIME",
                                                    "outboundInvocationArtifactType": "BUSINESS_SERVICE",
                                                    "outboundInvocationArtifactValue": "ErpIntegrationService",
                                                    "outboundInvocationAttachmentSupport": "no_data",
                                                    "outboundInvocationPaginatedRetrieval": "no_data",
                                                    "outboundInvocationCustomArtifact": "NO",
                                                    "inboundInvocationInvocationStyle": "no_data",
                                                    "inboundInvocationFunctionalPattern": "no_data",
                                                    "inboundInvocationProtocol": "no_data",
                                                    "inboundInvocationTLS": "no_data",
                                                    "inboundInvocationAuthenticationType": "no_data",
                                                    "inboundInvocationConnectivityMode": "no_data",
                                                    "inboundInvocationArtifactType": "no_data",
                                                    "inboundInvocationArtifactValue": "no_data",
                                                    "inboundInvocationAttachmentSupport": "no_data",
                                                    "inboundInvocationCustomArtifact": "no_data"
                                                }
                                            },
                                            {
                                                "type": "TRANSFORMER",
                                                "sources": [
                                                    "rest",
                                                    "erp"
                                                ],
                                                "target": "erp"
                                            },
                                            {
                                                "type": "INVOKE",
                                                "normalizedFields": {
                                                    "adapterType": "APPLICATION",
                                                    "adapterName": "Oracle ERP Cloud",
                                                    "adapterPluginID": "erp",
                                                    "endpointConfigurationSummary": "Download ESS Job Execution Details in ERP Cloud",
                                                    "adapterEndpointConfiguration": "OUTBOUND",
                                                    "integrationOperationName": "DownloadESSJobExecutionDetails",
                                                    "outboundInvocationOperationName": "DownloadESSJobExecutionDetails",
                                                    "outboundInvocationService": "ErpIntegrationService",
                                                    "outboundInvocationProtocol": "SOAP",
                                                    "outboundInvocationConnectivityMode": "CLOUD",
                                                    "outboundInvocationAuthenticationType": "USERNAME_PASSWORD_TOKEN",
                                                    "outboundInvocationTLS": "1_WAY_SSL",
                                                    "outboundInvocationOAuthProvider": "no_data",
                                                    "outboundInvocationInvocationStyle": "SYNC_REQUEST_RESPONSE",
                                                    "outboundInvocationFunctionalPattern": "REAL_TIME",
                                                    "outboundInvocationArtifactType": "BUSINESS_SERVICE",
                                                    "outboundInvocationArtifactValue": "ErpIntegrationService",
                                                    "outboundInvocationAttachmentSupport": "no_data",
                                                    "outboundInvocationPaginatedRetrieval": "no_data",
                                                    "outboundInvocationCustomArtifact": "NO",
                                                    "inboundInvocationInvocationStyle": "no_data",
                                                    "inboundInvocationFunctionalPattern": "no_data",
                                                    "inboundInvocationProtocol": "no_data",
                                                    "inboundInvocationTLS": "no_data",
                                                    "inboundInvocationAuthenticationType": "no_data",
                                                    "inboundInvocationConnectivityMode": "no_data",
                                                    "inboundInvocationArtifactType": "no_data",
                                                    "inboundInvocationArtifactValue": "no_data",
                                                    "inboundInvocationAttachmentSupport": "no_data",
                                                    "inboundInvocationCustomArtifact": "no_data"
                                                }
                                            },
                                            {
                                                "type": "TRANSFORMER",
                                                "sources": [
                                                    "rest",
                                                    "erp"
                                                ],
                                                "target": "ftp"
                                            },
                                            {
                                                "type": "INVOKE",
                                                "normalizedFields": {
                                                    "adapterType": "TECHNOLOGY",
                                                    "adapterName": "FTP",
                                                    "adapterPluginID": "ftp",
                                                    "endpointConfigurationSummary": "Write file to SFTP server in ASCII format",
                                                    "adapterEndpointConfiguration": "OUTBOUND",
                                                    "integrationOperationName": "Write",
                                                    "outboundInvocationOperationName": "no_data",
                                                    "outboundInvocationService": "no_data",
                                                    "outboundInvocationProtocol": "sFTP",
                                                    "outboundInvocationConnectivityMode": "CLOUD",
                                                    "outboundInvocationAuthenticationType": "USERNAME_CREDENTIALS",
                                                    "outboundInvocationTLS": "NO_TLS",
                                                    "outboundInvocationOAuthProvider": "no_data",
                                                    "outboundInvocationInvocationStyle": "SYNC_REQUEST_RESPONSE",
                                                    "outboundInvocationFunctionalPattern": "FILE_UPLOAD",
                                                    "outboundInvocationArtifactType": "FILE",
                                                    "outboundInvocationArtifactValue": "FileName:Payment.pdf,FIPS:No",
                                                    "outboundInvocationAttachmentSupport": "ATTACHMENT_UPLOAD",
                                                    "outboundInvocationPaginatedRetrieval": "no_data",
                                                    "outboundInvocationCustomArtifact": "no_data",
                                                    "inboundInvocationInvocationStyle": "no_data",
                                                    "inboundInvocationFunctionalPattern": "no_data",
                                                    "inboundInvocationProtocol": "no_data",
                                                    "inboundInvocationTLS": "no_data",
                                                    "inboundInvocationAuthenticationType": "no_data",
                                                    "inboundInvocationConnectivityMode": "no_data",
                                                    "inboundInvocationArtifactType": "no_data",
                                                    "inboundInvocationArtifactValue": "no_data",
                                                    "inboundInvocationAttachmentSupport": "no_data",
                                                    "inboundInvocationCustomArtifact": "no_data"
                                                }
                                            }
                                        ]
                                    }
                                ]
                            },
                            {
                                "type": "ROUTER",
                                "routes": [
                                    {
                                        "type": "ROUTER_ROUTE",
                                        "xpathExpression": "$CurrRecord/nsmpr2:GetRunDatesOutput/nsmpr2:EFT_TMPL_ID = \"\"",
                                        "activities": [
                                            {
                                                "type": "ACTIVITY_STREAM_LOGGER"
                                            }
                                        ]
                                    },
                                    {
                                        "type": "ROUTER_ROUTE",
                                        "xpathExpression": "true",
                                        "activities": [
                                            {
                                                "type": "TRANSFORMER",
                                                "sources": [
                                                    "rest"
                                                ],
                                                "target": "erp"
                                            },
                                            {
                                                "type": "INVOKE",
                                                "normalizedFields": {
                                                    "adapterType": "APPLICATION",
                                                    "adapterName": "Oracle ERP Cloud",
                                                    "adapterPluginID": "erp",
                                                    "endpointConfigurationSummary": "Submit ESS Job Request in ERP Cloud",
                                                    "adapterEndpointConfiguration": "OUTBOUND",
                                                    "integrationOperationName": "SubmitESSJobRequest",
                                                    "outboundInvocationOperationName": "SubmitESSJobRequest",
                                                    "outboundInvocationService": "ErpIntegrationService",
                                                    "outboundInvocationProtocol": "SOAP",
                                                    "outboundInvocationConnectivityMode": "CLOUD",
                                                    "outboundInvocationAuthenticationType": "USERNAME_PASSWORD_TOKEN",
                                                    "outboundInvocationTLS": "1_WAY_SSL",
                                                    "outboundInvocationOAuthProvider": "no_data",
                                                    "outboundInvocationInvocationStyle": "SYNC_REQUEST_RESPONSE",
                                                    "outboundInvocationFunctionalPattern": "REAL_TIME",
                                                    "outboundInvocationArtifactType": "BUSINESS_SERVICE",
                                                    "outboundInvocationArtifactValue": "ErpIntegrationService",
                                                    "outboundInvocationAttachmentSupport": "no_data",
                                                    "outboundInvocationPaginatedRetrieval": "no_data",
                                                    "outboundInvocationCustomArtifact": "NO",
                                                    "inboundInvocationInvocationStyle": "no_data",
                                                    "inboundInvocationFunctionalPattern": "no_data",
                                                    "inboundInvocationProtocol": "no_data",
                                                    "inboundInvocationTLS": "no_data",
                                                    "inboundInvocationAuthenticationType": "no_data",
                                                    "inboundInvocationConnectivityMode": "no_data",
                                                    "inboundInvocationArtifactType": "no_data",
                                                    "inboundInvocationArtifactValue": "no_data",
                                                    "inboundInvocationAttachmentSupport": "no_data",
                                                    "inboundInvocationCustomArtifact": "no_data"
                                                }
                                            },
                                            {
                                                "type": "TRANSFORMER",
                                                "sources": [
                                                    "rest",
                                                    "erp"
                                                ],
                                                "target": "erp"
                                            },
                                            {
                                                "type": "INVOKE",
                                                "normalizedFields": {
                                                    "adapterType": "APPLICATION",
                                                    "adapterName": "Oracle ERP Cloud",
                                                    "adapterPluginID": "erp",
                                                    "endpointConfigurationSummary": "Download ESS Job Execution Details in ERP Cloud",
                                                    "adapterEndpointConfiguration": "OUTBOUND",
                                                    "integrationOperationName": "DownloadESSJobExecutionDetails",
                                                    "outboundInvocationOperationName": "DownloadESSJobExecutionDetails",
                                                    "outboundInvocationService": "ErpIntegrationService",
                                                    "outboundInvocationProtocol": "SOAP",
                                                    "outboundInvocationConnectivityMode": "CLOUD",
                                                    "outboundInvocationAuthenticationType": "USERNAME_PASSWORD_TOKEN",
                                                    "outboundInvocationTLS": "1_WAY_SSL",
                                                    "outboundInvocationOAuthProvider": "no_data",
                                                    "outboundInvocationInvocationStyle": "SYNC_REQUEST_RESPONSE",
                                                    "outboundInvocationFunctionalPattern": "REAL_TIME",
                                                    "outboundInvocationArtifactType": "BUSINESS_SERVICE",
                                                    "outboundInvocationArtifactValue": "ErpIntegrationService",
                                                    "outboundInvocationAttachmentSupport": "no_data",
                                                    "outboundInvocationPaginatedRetrieval": "no_data",
                                                    "outboundInvocationCustomArtifact": "NO",
                                                    "inboundInvocationInvocationStyle": "no_data",
                                                    "inboundInvocationFunctionalPattern": "no_data",
                                                    "inboundInvocationProtocol": "no_data",
                                                    "inboundInvocationTLS": "no_data",
                                                    "inboundInvocationAuthenticationType": "no_data",
                                                    "inboundInvocationConnectivityMode": "no_data",
                                                    "inboundInvocationArtifactType": "no_data",
                                                    "inboundInvocationArtifactValue": "no_data",
                                                    "inboundInvocationAttachmentSupport": "no_data",
                                                    "inboundInvocationCustomArtifact": "no_data"
                                                }
                                            },
                                            {
                                                "type": "TRANSFORMER",
                                                "sources": [
                                                    "rest",
                                                    "erp"
                                                ],
                                                "target": "ftp"
                                            },
                                            {
                                                "type": "INVOKE",
                                                "normalizedFields": {
                                                    "adapterType": "TECHNOLOGY",
                                                    "adapterName": "FTP",
                                                    "adapterPluginID": "ftp",
                                                    "endpointConfigurationSummary": "Write file to SFTP server in binary format",
                                                    "adapterEndpointConfiguration": "OUTBOUND",
                                                    "integrationOperationName": "Write",
                                                    "outboundInvocationOperationName": "no_data",
                                                    "outboundInvocationService": "no_data",
                                                    "outboundInvocationProtocol": "sFTP",
                                                    "outboundInvocationConnectivityMode": "CLOUD",
                                                    "outboundInvocationAuthenticationType": "USERNAME_CREDENTIALS",
                                                    "outboundInvocationTLS": "NO_TLS",
                                                    "outboundInvocationOAuthProvider": "no_data",
                                                    "outboundInvocationInvocationStyle": "SYNC_REQUEST_RESPONSE",
                                                    "outboundInvocationFunctionalPattern": "FILE_UPLOAD",
                                                    "outboundInvocationArtifactType": "FILE",
                                                    "outboundInvocationArtifactValue": "FileName:PaymentEFT.zip,FIPS:No",
                                                    "outboundInvocationAttachmentSupport": "ATTACHMENT_UPLOAD",
                                                    "outboundInvocationPaginatedRetrieval": "no_data",
                                                    "outboundInvocationCustomArtifact": "no_data",
                                                    "inboundInvocationInvocationStyle": "no_data",
                                                    "inboundInvocationFunctionalPattern": "no_data",
                                                    "inboundInvocationProtocol": "no_data",
                                                    "inboundInvocationTLS": "no_data",
                                                    "inboundInvocationAuthenticationType": "no_data",
                                                    "inboundInvocationConnectivityMode": "no_data",
                                                    "inboundInvocationArtifactType": "no_data",
                                                    "inboundInvocationArtifactValue": "no_data",
                                                    "inboundInvocationAttachmentSupport": "no_data",
                                                    "inboundInvocationCustomArtifact": "no_data"
                                                }
                                            }
                                        ]
                                    }
                                ]
                            },
                            {
                                "type": "LABEL",
                                "assignments": [
                                    {
                                        "type": "ASSIGNMENT",
                                        "xpathExpression": "concat($Log_3,fn:current-time(),\" Submitted \",$CurrRecord/nsmpr5:GetRunDatesOutput/nsmpr5:PAY_GROUP,\" - \",$CurrRecord/nsmpr5:GetRunDatesOutput/nsmpr5:RUN_DATE,\"\n\")"
                                    }
                                ]
                            }
                        ]
                    },
                    {
                        "type": "LABEL",
                        "assignments": [
                            {
                                "type": "ASSIGNMENT",
                                "xpathExpression": "concat(fn:current-time(),\" Payment Run Finished\")"
                            }
                        ]
                    },
                    {
                        "type": "TRANSFORMER",
                        "sources": [
                            "rest"
                        ],
                        "target": "ftp"
                    },
                    {
                        "type": "INVOKE",
                        "normalizedFields": {
                            "adapterType": "TECHNOLOGY",
                            "adapterName": "FTP",
                            "adapterPluginID": "ftp",
                            "endpointConfigurationSummary": "Write (append) file to SFTP server in ASCII format",
                            "adapterEndpointConfiguration": "OUTBOUND",
                            "integrationOperationName": "Write",
                            "outboundInvocationOperationName": "no_data",
                            "outboundInvocationService": "no_data",
                            "outboundInvocationProtocol": "sFTP",
                            "outboundInvocationConnectivityMode": "CLOUD",
                            "outboundInvocationAuthenticationType": "USERNAME_CREDENTIALS",
                            "outboundInvocationTLS": "NO_TLS",
                            "outboundInvocationOAuthProvider": "no_data",
                            "outboundInvocationInvocationStyle": "SYNC_REQUEST_RESPONSE",
                            "outboundInvocationFunctionalPattern": "FILE_UPLOAD",
                            "outboundInvocationArtifactType": "FILE",
                            "outboundInvocationArtifactValue": "FileName:OICLogs.csv,FIPS:No",
                            "outboundInvocationAttachmentSupport": "no_data",
                            "outboundInvocationPaginatedRetrieval": "no_data",
                            "outboundInvocationCustomArtifact": "no_data",
                            "inboundInvocationInvocationStyle": "no_data",
                            "inboundInvocationFunctionalPattern": "no_data",
                            "inboundInvocationProtocol": "no_data",
                            "inboundInvocationTLS": "no_data",
                            "inboundInvocationAuthenticationType": "no_data",
                            "inboundInvocationConnectivityMode": "no_data",
                            "inboundInvocationArtifactType": "no_data",
                            "inboundInvocationArtifactValue": "no_data",
                            "inboundInvocationAttachmentSupport": "no_data",
                            "inboundInvocationCustomArtifact": "no_data"
                        }
                    },
                    {
                        "type": "STOP"
                    }
                ]
            },
            "metrics": {
                "actions": {
                    "parallelForEach": []
                }
            }
        }
    }

我想出了以下代码来分别访问它们,但此路径可以在其他 json 文件中更改。

$ActivityTypes = Get-Content -Path $pathToJsonFile | ConvertFrom-Json

$ActivityTypes.icsProject.orchestration.activities |  ? type -eq 'RECEIVE' |  Select-Object -expand normalizedFields
$ActivityTypes.icsProject.orchestration.activities |  ? type -eq 'LABEL' |  Select-Object -expand assignments
$ActivityTypes.icsProject.orchestration.activities |  ? type -eq 'TRANSFORMER' |  Select-Object -expand sources
$ActivityTypes.icsProject.orchestration.activities |  ? type -eq 'INVOKE' |  Select-Object -expand normalizedFields
$ActivityTypes.icsProject.orchestration.activities |  ? type -eq 'FOR' |  Select-Object -expand activities | Select-Object -expand routes | Select-Object -expand activities | ? type -eq 'INVOKE' | Select-Object -expand normalizedFields
$ActivityTypes.icsProject.orchestration.activities |  ? type -eq 'FOR' |  Select-Object -expand activities | Select-Object -expand routes | Select-Object -expand activities | ? type -eq 'RECEIVE' | Select-Object -expand normalizedFields

无论路径如何,有没有办法至少到达这个 normalizedFields 键。

最后,我试图做到这一点。下面给出的名称和值是我展开 normalizedFields 时得到的

enter image description here

1 个答案:

答案 0 :(得分:1)

这需要JSONPath。这个表达式可以解决你的问题:$..normalizedFields。您可以在 jsonpath.com 或任何其他 JSONPath 评估器上对其进行测试。

[
  "$['icsProject']['orchestration']['activities'][0]['normalizedFields']",
  "$['icsProject']['orchestration']['activities'][3]['normalizedFields']",
  "$['icsProject']['orchestration']['activities'][5]['activities'][0]['routes'][1]['activities'][1]['normalizedFields']",
  "$['icsProject']['orchestration']['activities'][5]['activities'][0]['routes'][1]['activities'][3]['normalizedFields']",
  "$['icsProject']['orchestration']['activities'][5]['activities'][0]['routes'][1]['activities'][5]['normalizedFields']",
  "$['icsProject']['orchestration']['activities'][5]['activities'][1]['routes'][1]['activities'][1]['normalizedFields']",
  "$['icsProject']['orchestration']['activities'][5]['activities'][1]['routes'][1]['activities'][3]['normalizedFields']",
  "$['icsProject']['orchestration']['activities'][5]['activities'][1]['routes'][1]['activities'][5]['normalizedFields']",
  "$['icsProject']['orchestration']['activities'][8]['normalizedFields']"
]

不幸的是,我不了解一般的 PowerShell 实现(一些尝试:12)。还有无处不在的Json.NET支持JSONPath(3),但是在PowerShell中使用可能不方便。

所以这里是应该在 Windows PowerShell 和 PowerShell Core 中工作的快速n-dirty递归函数:

function Find-ObjectProperty {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [ValidateNotNullOrEmpty()]
        [System.Object[]]$InputObject,
        
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]$Property
    )
    
    Process {
        foreach ($object in $InputObject) {
            foreach ($item in $object.psobject.Properties) {
                if ($item.Name -eq $Property) {
                    Write-Verbose "OUT: $($item.Name)"
                    $object.($item.Name)
                }
                else {
                    if ($item.Value -is [array]) {
                        Write-Verbose "RECURSE [Array]: $($item.Name)"
                        foreach ($element in $Item.Value) {
                            & $PSCmdlet.MyInvocation.MyCommand.Name -InputObject $element -Property $Property                
                        }
                    }
                    else {
                        if ($item.Value -is [PSCustomObject]) {
                            Write-Verbose "RECURSE: $($item.Name)"
                            & $PSCmdlet.MyInvocation.MyCommand.Name -InputObject $object.($item.Name) -Property $Property
                        }
                    }
                }
            }
        }
    }
}

示例

$ActivityTypes = Get-Content -Path $pathToJsonFile | ConvertFrom-Json
$normalizedFields = $ActivityTypes | Find-ObjectProperty -Property 'normalizedFields' -Verbose
Write-Host "Found: $($normalizedFields.count)"
$normalizedFields

输出

VERBOSE: RECURSE: icsProject
VERBOSE: RECURSE: processorCount
VERBOSE: RECURSE: orchestration
VERBOSE: RECURSE [Array]: activities
VERBOSE: OUT: normalizedFields
VERBOSE: RECURSE [Array]: assignments
VERBOSE: RECURSE [Array]: sources
VERBOSE: OUT: normalizedFields
VERBOSE: RECURSE [Array]: assignments
VERBOSE: RECURSE [Array]: activities
VERBOSE: RECURSE [Array]: routes
VERBOSE: RECURSE [Array]: activities
VERBOSE: RECURSE [Array]: activities
VERBOSE: RECURSE [Array]: sources
VERBOSE: OUT: normalizedFields
VERBOSE: RECURSE [Array]: sources
VERBOSE: OUT: normalizedFields
VERBOSE: RECURSE [Array]: sources
VERBOSE: OUT: normalizedFields
VERBOSE: RECURSE [Array]: routes
VERBOSE: RECURSE [Array]: activities
VERBOSE: RECURSE [Array]: activities
VERBOSE: RECURSE [Array]: sources
VERBOSE: OUT: normalizedFields
VERBOSE: RECURSE [Array]: sources
VERBOSE: OUT: normalizedFields
VERBOSE: RECURSE [Array]: sources
VERBOSE: OUT: normalizedFields
VERBOSE: RECURSE [Array]: assignments
VERBOSE: RECURSE [Array]: assignments
VERBOSE: RECURSE [Array]: sources
VERBOSE: OUT: normalizedFields
VERBOSE: RECURSE: metrics
VERBOSE: RECURSE: actions
VERBOSE: RECURSE [Array]: parallelForEach
Found: 9


adapterType                          : TECHNOLOGY
adapterName                          : REST
adapterPluginID                      : rest
endpointConfigurationSummary         : Trigger OIC REST Integration: Post /ProcessPayments/
adapterEndpointConfiguration         : INBOUND
integrationOperationName             : Post
outboundInvocationOperationName      : no_data
outboundInvocationService            : no_data
outboundInvocationProtocol           : no_data
outboundInvocationConnectivityMode   : no_data
outboundInvocationAuthenticationType : no_data
outboundInvocationTLS                : no_data
outboundInvocationOAuthProvider      : no_data
outboundInvocationInvocationStyle    : no_data
outboundInvocationFunctionalPattern  : no_data
outboundInvocationArtifactType       : no_data
outboundInvocationArtifactValue      : no_data
outboundInvocationAttachmentSupport  : no_data
outboundInvocationPaginatedRetrieval : no_data
outboundInvocationCustomArtifact     : no_data
inboundInvocationInvocationStyle     : NOTIFICATION
inboundInvocationFunctionalPattern   : TRIGGER
inboundInvocationProtocol            : REST
inboundInvocationTLS                 : 1_WAY_SSL
inboundInvocationAuthenticationType  : MULTI_TOKEN
inboundInvocationConnectivityMode    : CLOUD
inboundInvocationArtifactType        : no_data
inboundInvocationArtifactValue       : /ProcessPayments/
inboundInvocationAttachmentSupport   : no_data
inboundInvocationCustomArtifact      : no_data

adapterType                          : TECHNOLOGY
adapterName                          : Oracle ATP
adapterPluginID                      : atpdatabase
endpointConfigurationSummary         : Execute Pure SQL Query in Oracle ATP
adapterEndpointConfiguration         : OUTBOUND
integrationOperationName             : GetRunDates_REQUEST
outboundInvocationOperationName      : no_data
outboundInvocationService            : no_data
outboundInvocationProtocol           : JDBC
outboundInvocationConnectivityMode   : CLOUD
outboundInvocationAuthenticationType : TECHNOLOGY_CREDENTIALS
outboundInvocationTLS                : 1_WAY_SSL
outboundInvocationOAuthProvider      : no_data
outboundInvocationInvocationStyle    : SYNC_REQUEST_RESPONSE
outboundInvocationFunctionalPattern  : REAL_TIME
outboundInvocationArtifactType       : PURESQL
outboundInvocationArtifactValue      : Select * from DATES WHERE RUN_DATE = #DateParam
outboundInvocationAttachmentSupport  : no_data
outboundInvocationPaginatedRetrieval : no_data
outboundInvocationCustomArtifact     : no_data
inboundInvocationInvocationStyle     : no_data
inboundInvocationFunctionalPattern   : no_data
inboundInvocationProtocol            : no_data
inboundInvocationTLS                 : no_data
inboundInvocationAuthenticationType  : no_data
inboundInvocationConnectivityMode    : no_data
inboundInvocationArtifactType        : no_data
inboundInvocationArtifactValue       : no_data
inboundInvocationAttachmentSupport   : no_data
inboundInvocationCustomArtifact      : no_data

adapterType                          : APPLICATION
adapterName                          : Oracle ERP Cloud
adapterPluginID                      : erp
endpointConfigurationSummary         : Submit ESS Job Request in ERP Cloud
adapterEndpointConfiguration         : OUTBOUND
integrationOperationName             : SubmitESSJobRequest
outboundInvocationOperationName      : SubmitESSJobRequest
outboundInvocationService            : ErpIntegrationService
outboundInvocationProtocol           : SOAP
outboundInvocationConnectivityMode   : CLOUD
outboundInvocationAuthenticationType : USERNAME_PASSWORD_TOKEN
outboundInvocationTLS                : 1_WAY_SSL
outboundInvocationOAuthProvider      : no_data
outboundInvocationInvocationStyle    : SYNC_REQUEST_RESPONSE
outboundInvocationFunctionalPattern  : REAL_TIME
outboundInvocationArtifactType       : BUSINESS_SERVICE
outboundInvocationArtifactValue      : ErpIntegrationService
outboundInvocationAttachmentSupport  : no_data
outboundInvocationPaginatedRetrieval : no_data
outboundInvocationCustomArtifact     : NO
inboundInvocationInvocationStyle     : no_data
inboundInvocationFunctionalPattern   : no_data
inboundInvocationProtocol            : no_data
inboundInvocationTLS                 : no_data
inboundInvocationAuthenticationType  : no_data
inboundInvocationConnectivityMode    : no_data
inboundInvocationArtifactType        : no_data
inboundInvocationArtifactValue       : no_data
inboundInvocationAttachmentSupport   : no_data
inboundInvocationCustomArtifact      : no_data

adapterType                          : APPLICATION
adapterName                          : Oracle ERP Cloud
adapterPluginID                      : erp
endpointConfigurationSummary         : Download ESS Job Execution Details in ERP Cloud
adapterEndpointConfiguration         : OUTBOUND
integrationOperationName             : DownloadESSJobExecutionDetails
outboundInvocationOperationName      : DownloadESSJobExecutionDetails
outboundInvocationService            : ErpIntegrationService
outboundInvocationProtocol           : SOAP
outboundInvocationConnectivityMode   : CLOUD
outboundInvocationAuthenticationType : USERNAME_PASSWORD_TOKEN
outboundInvocationTLS                : 1_WAY_SSL
outboundInvocationOAuthProvider      : no_data
outboundInvocationInvocationStyle    : SYNC_REQUEST_RESPONSE
outboundInvocationFunctionalPattern  : REAL_TIME
outboundInvocationArtifactType       : BUSINESS_SERVICE
outboundInvocationArtifactValue      : ErpIntegrationService
outboundInvocationAttachmentSupport  : no_data
outboundInvocationPaginatedRetrieval : no_data
outboundInvocationCustomArtifact     : NO
inboundInvocationInvocationStyle     : no_data
inboundInvocationFunctionalPattern   : no_data
inboundInvocationProtocol            : no_data
inboundInvocationTLS                 : no_data
inboundInvocationAuthenticationType  : no_data
inboundInvocationConnectivityMode    : no_data
inboundInvocationArtifactType        : no_data
inboundInvocationArtifactValue       : no_data
inboundInvocationAttachmentSupport   : no_data
inboundInvocationCustomArtifact      : no_data

adapterType                          : TECHNOLOGY
adapterName                          : FTP
adapterPluginID                      : ftp
endpointConfigurationSummary         : Write file to SFTP server in ASCII format
adapterEndpointConfiguration         : OUTBOUND
integrationOperationName             : Write
outboundInvocationOperationName      : no_data
outboundInvocationService            : no_data
outboundInvocationProtocol           : sFTP
outboundInvocationConnectivityMode   : CLOUD
outboundInvocationAuthenticationType : USERNAME_CREDENTIALS
outboundInvocationTLS                : NO_TLS
outboundInvocationOAuthProvider      : no_data
outboundInvocationInvocationStyle    : SYNC_REQUEST_RESPONSE
outboundInvocationFunctionalPattern  : FILE_UPLOAD
outboundInvocationArtifactType       : FILE
outboundInvocationArtifactValue      : FileName:Payment.pdf,FIPS:No
outboundInvocationAttachmentSupport  : ATTACHMENT_UPLOAD
outboundInvocationPaginatedRetrieval : no_data
outboundInvocationCustomArtifact     : no_data
inboundInvocationInvocationStyle     : no_data
inboundInvocationFunctionalPattern   : no_data
inboundInvocationProtocol            : no_data
inboundInvocationTLS                 : no_data
inboundInvocationAuthenticationType  : no_data
inboundInvocationConnectivityMode    : no_data
inboundInvocationArtifactType        : no_data
inboundInvocationArtifactValue       : no_data
inboundInvocationAttachmentSupport   : no_data
inboundInvocationCustomArtifact      : no_data

adapterType                          : APPLICATION
adapterName                          : Oracle ERP Cloud
adapterPluginID                      : erp
endpointConfigurationSummary         : Submit ESS Job Request in ERP Cloud
adapterEndpointConfiguration         : OUTBOUND
integrationOperationName             : SubmitESSJobRequest
outboundInvocationOperationName      : SubmitESSJobRequest
outboundInvocationService            : ErpIntegrationService
outboundInvocationProtocol           : SOAP
outboundInvocationConnectivityMode   : CLOUD
outboundInvocationAuthenticationType : USERNAME_PASSWORD_TOKEN
outboundInvocationTLS                : 1_WAY_SSL
outboundInvocationOAuthProvider      : no_data
outboundInvocationInvocationStyle    : SYNC_REQUEST_RESPONSE
outboundInvocationFunctionalPattern  : REAL_TIME
outboundInvocationArtifactType       : BUSINESS_SERVICE
outboundInvocationArtifactValue      : ErpIntegrationService
outboundInvocationAttachmentSupport  : no_data
outboundInvocationPaginatedRetrieval : no_data
outboundInvocationCustomArtifact     : NO
inboundInvocationInvocationStyle     : no_data
inboundInvocationFunctionalPattern   : no_data
inboundInvocationProtocol            : no_data
inboundInvocationTLS                 : no_data
inboundInvocationAuthenticationType  : no_data
inboundInvocationConnectivityMode    : no_data
inboundInvocationArtifactType        : no_data
inboundInvocationArtifactValue       : no_data
inboundInvocationAttachmentSupport   : no_data
inboundInvocationCustomArtifact      : no_data

adapterType                          : APPLICATION
adapterName                          : Oracle ERP Cloud
adapterPluginID                      : erp
endpointConfigurationSummary         : Download ESS Job Execution Details in ERP Cloud
adapterEndpointConfiguration         : OUTBOUND
integrationOperationName             : DownloadESSJobExecutionDetails
outboundInvocationOperationName      : DownloadESSJobExecutionDetails
outboundInvocationService            : ErpIntegrationService
outboundInvocationProtocol           : SOAP
outboundInvocationConnectivityMode   : CLOUD
outboundInvocationAuthenticationType : USERNAME_PASSWORD_TOKEN
outboundInvocationTLS                : 1_WAY_SSL
outboundInvocationOAuthProvider      : no_data
outboundInvocationInvocationStyle    : SYNC_REQUEST_RESPONSE
outboundInvocationFunctionalPattern  : REAL_TIME
outboundInvocationArtifactType       : BUSINESS_SERVICE
outboundInvocationArtifactValue      : ErpIntegrationService
outboundInvocationAttachmentSupport  : no_data
outboundInvocationPaginatedRetrieval : no_data
outboundInvocationCustomArtifact     : NO
inboundInvocationInvocationStyle     : no_data
inboundInvocationFunctionalPattern   : no_data
inboundInvocationProtocol            : no_data
inboundInvocationTLS                 : no_data
inboundInvocationAuthenticationType  : no_data
inboundInvocationConnectivityMode    : no_data
inboundInvocationArtifactType        : no_data
inboundInvocationArtifactValue       : no_data
inboundInvocationAttachmentSupport   : no_data
inboundInvocationCustomArtifact      : no_data

adapterType                          : TECHNOLOGY
adapterName                          : FTP
adapterPluginID                      : ftp
endpointConfigurationSummary         : Write file to SFTP server in binary format
adapterEndpointConfiguration         : OUTBOUND
integrationOperationName             : Write
outboundInvocationOperationName      : no_data
outboundInvocationService            : no_data
outboundInvocationProtocol           : sFTP
outboundInvocationConnectivityMode   : CLOUD
outboundInvocationAuthenticationType : USERNAME_CREDENTIALS
outboundInvocationTLS                : NO_TLS
outboundInvocationOAuthProvider      : no_data
outboundInvocationInvocationStyle    : SYNC_REQUEST_RESPONSE
outboundInvocationFunctionalPattern  : FILE_UPLOAD
outboundInvocationArtifactType       : FILE
outboundInvocationArtifactValue      : FileName:PaymentEFT.zip,FIPS:No
outboundInvocationAttachmentSupport  : ATTACHMENT_UPLOAD
outboundInvocationPaginatedRetrieval : no_data
outboundInvocationCustomArtifact     : no_data
inboundInvocationInvocationStyle     : no_data
inboundInvocationFunctionalPattern   : no_data
inboundInvocationProtocol            : no_data
inboundInvocationTLS                 : no_data
inboundInvocationAuthenticationType  : no_data
inboundInvocationConnectivityMode    : no_data
inboundInvocationArtifactType        : no_data
inboundInvocationArtifactValue       : no_data
inboundInvocationAttachmentSupport   : no_data
inboundInvocationCustomArtifact      : no_data

adapterType                          : TECHNOLOGY
adapterName                          : FTP
adapterPluginID                      : ftp
endpointConfigurationSummary         : Write (append) file to SFTP server in ASCII format
adapterEndpointConfiguration         : OUTBOUND
integrationOperationName             : Write
outboundInvocationOperationName      : no_data
outboundInvocationService            : no_data
outboundInvocationProtocol           : sFTP
outboundInvocationConnectivityMode   : CLOUD
outboundInvocationAuthenticationType : USERNAME_CREDENTIALS
outboundInvocationTLS                : NO_TLS
outboundInvocationOAuthProvider      : no_data
outboundInvocationInvocationStyle    : SYNC_REQUEST_RESPONSE
outboundInvocationFunctionalPattern  : FILE_UPLOAD
outboundInvocationArtifactType       : FILE
outboundInvocationArtifactValue      : FileName:OICLogs.csv,FIPS:No
outboundInvocationAttachmentSupport  : no_data
outboundInvocationPaginatedRetrieval : no_data
outboundInvocationCustomArtifact     : no_data
inboundInvocationInvocationStyle     : no_data
inboundInvocationFunctionalPattern   : no_data
inboundInvocationProtocol            : no_data
inboundInvocationTLS                 : no_data
inboundInvocationAuthenticationType  : no_data
inboundInvocationConnectivityMode    : no_data
inboundInvocationArtifactType        : no_data
inboundInvocationArtifactValue       : no_data
inboundInvocationAttachmentSupport   : no_data
inboundInvocationCustomArtifact      : no_data
相关问题