у меня есть приложение логики в Azure. В настоящее время я застрял в инициализации переменной выражения после анализа json. я хочу перехватить параметр «appId», но все, что я получаю, это ноль, несмотря на то, что синтаксический анализ json выдает выход, поэтому кажется, что я выражаю неправильный синтаксис.
это мой вывод JSON на этапе анализа JSON
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals",
"value": [
{
"id": "***********************",
"deletedDateTime": null,
"accountEnabled": true,
"alternativeNames": [],
"appDisplayName": "testapp",
"appDescription": null,
"appId": "******************************",
"applicationTemplateId": null,
"appOwnerOrganizationId": "****************************",
"appRoleAssignmentRequired": false,
"createdDateTime": "2024-06-23T10:24:17Z",
"description": null,
"disabledByMicrosoftStatus": null,
"displayName": "testapp",
"homepage": null,
"loginUrl": null,
"logoutUrl": null,
"notes": null,
"notificationEmailAddresses": [],
"preferredSingleSignOnMode": null,
"preferredTokenSigningKeyThumbprint": null,
"replyUrls": [],
"servicePrincipalNames": [
"********************************"
],
"servicePrincipalType": "Application",
"signInAudience": "AzureADMyOrg",
"tags": [
"HideApp",
"WindowsAzureActiveDirectoryIntegratedApp"
],
"tokenEncryptionKeyId": null,
"samlSingleSignOnSettings": null,
"addIns": [],
"appRoles": [],
"info": {
"logoUrl": null,
"marketingUrl": null,
"privacyStatementUrl": null,
"supportUrl": null,
"termsOfServiceUrl": null
},
"keyCredentials": [],
"oauth2PermissionScopes": [],
"passwordCredentials": [],
"resourceSpecificApplicationPermissions": [],
"verifiedPublisher": {
"displayName": null,
"verifiedPublisherId": null,
"addedDateTime": null
}
},
{
"id": "**********************8",
"deletedDateTime": null,
"accountEnabled": true,
"alternativeNames": [
"isExplicit=False",
"/subscriptions/******************************************/resourcegroups/Test-RG/providers/Microsoft.Logic/workflows/test"
],
"appDisplayName": null,
"appDescription": null,
"appId": "******************",
"applicationTemplateId": null,
"appOwnerOrganizationId": null,
"appRoleAssignmentRequired": false,
"createdDateTime": "2024-07-11T09:32:51Z",
"description": null,
"disabledByMicrosoftStatus": null,
"displayName": "testeldad",
"homepage": null,
"loginUrl": null,
"logoutUrl": null,
"notes": null,
"notificationEmailAddresses": [],
"preferredSingleSignOnMode": null,
"preferredTokenSigningKeyThumbprint": null,
"replyUrls": [],
"servicePrincipalNames": [
"***********************",
"https://identity.azure.net/*******************/**********************"
],
"servicePrincipalType": "ManagedIdentity",
"signInAudience": null,
"tags": [],
"tokenEncryptionKeyId": null,
"info": null,
"samlSingleSignOnSettings": null,
"addIns": [],
"appRoles": [],
"keyCredentials": [
{
"customKeyIdentifier": "*****************",
"displayName": "CN=**********************",
"endDateTime": "2024-10-09T09:27:00Z",
"key": null,
"keyId": "*********************",
"startDateTime": "2024-07-11T09:27:00Z",
"type": "AsymmetricX509Cert",
"usage": "Verify"
}
],
"oauth2PermissionScopes": [],
"passwordCredentials": [],
"resourceSpecificApplicationPermissions": [],
"verifiedPublisher": {
"displayName": null,
"verifiedPublisherId": null,
"addedDateTime": null
}
}
]
}
я пробовал использовать этот синтаксис --> first(outputs('Parse_JSON')?['body/value'])['appId'] и многое-многое другое :)
Я использую «первый», потому что в выходных данных есть несколько экземпляров appId, поэтому я хочу перехватить первую часть. (не знаю, правильно ли это)
это результат компоновки -
Вам необходимо инициализировать переменные в начале вашего потока. Вы можете установить переменную, чтобы обновить значение в любой момент потока. Приложения логики должны показывать вам ошибку, указывающую, что вы добавили инициализацию в середине процесса.
Чтобы получить первый идентификатор приложения, вместо first(outputs('Parse_JSON')?['body/value'])['appId']
вы должны использовать это:
body('Parse_JSON')?['value']?[0]?['appId']
Тестирование:
Обновлять:
Анализ JSON перед извлечением значений полей, строго говоря, не требуется. Например, вы получаете содержимое JSON в выходных данных действия http:
Вы можете получить значение appId оттуда следующим образом:
body('HTTP')?['value']?[0]?['appId']
Спасибо @10p, ну, поток должен был завершиться, но значение вернулось пустым :(
@monsal Я добавил к ответу скриншот успешного теста
Спасибо @10p, выглядит хорошо. но со своей стороны я не получаю тех же результатов - это на моем этапе составления - может быть, схема анализа json не точна? (я добавил скриншот выше)
@monsal, JSON, который вы пытаетесь проанализировать, какое действие он производит? Можете ли вы поделиться полным JSON, а не его частью?
Да, прости. я опубликую это выше.
шаг перед использованием синтаксического анализа json — это HTTP-вызов для графика ms
@monsal, я провел еще один успешный тест, используя HTTP-вызов, получив JSON из вашего вопроса и получив оттуда первое значение appId - добавил подробности в конец моего ответа
Это помогает. Спасибо большое, чемпион :)
Спасибо, Джош, вообще-то я вначале использую Init. в этом потоке я хочу добиться ротации секретов SPN. Итак, все работает, за исключением того, что когда я хочу передать графику MS идентификатор SPN для добавления нового секрета и передачи его обратно в хранилище ключей, выходные данные будут нулевыми, поэтому я решил снова использовать init после анализа json, чтобы посмотреть, не пропустил ли я что-то .