Как преобразовать json в коллекцию в Power Apps
У меня есть приложение Power, которое использует поток от Power Automate.
Мой поток выполняет HTTP-запрос и отвечает JSON на мощные приложения, как показано ниже.
Вот текст в формате JSON:
{"value": "[{\"dataAreaId\":\"mv\",\"AccountNum\":\"100000\",\"Name\":\"*****L FOOD AB\"},{\"dataAreaId\":\"mv\",\"AccountNum\":\"100001\",\"Name\":\"**** AB\"},{\"dataAreaId\":\"mv\",\"AccountNum\":\"100014\",\"Name\":\"****(SEB)\"},{\"dataAreaId\":\"mv\",\"AccountNum\":\"100021\",\"Name\":\"**** AB\"},{\"dataAreaId\":\"mv\",\"AccountNum\":\"100029\",\"Name\":\"**** AB\"},{\"dataAreaId\":\"mv\",\"AccountNum\":\"500100\",\"Name\":\"**** AB\"},{\"dataAreaId\":\"mv\",\"AccountNum\":\"500210\",\"Name\":\"****\"}]"}
Но когда я пытаюсь преобразовать этот JSON в коллекцию, он не ведет себя как список.
Это просто похоже на текст. Вот как я пытаюсь связать список.
Как я могу создать коллекцию из JSON для привязки к представлению галереи?
3 ответа
Я нашел решение. Наконец, я создаю коллекцию из отклика потока. Имя потока - GetVendor.
Ответ потока такой:
{"value": "[{\"dataAreaId\":\"mv\",\"AccountNum\":\"100000\",\"Name\":\"*****L FOOD AB\"},{\"dataAreaId\":\"mv\",\"AccountNum\":\"100001\",\"Name\":\"**** AB\"},{\"dataAreaId\":\"mv\",\"AccountNum\":\"100014\",\"Name\":\"****(SEB)\"},{\"dataAreaId\":\"mv\",\"AccountNum\":\"100021\",\"Name\":\"**** AB\"},{\"dataAreaId\":\"mv\",\"AccountNum\":\"100029\",\"Name\":\"**** AB\"},{\"dataAreaId\":\"mv\",\"AccountNum\":\"500100\",\"Name\":\"**** AB\"},{\"dataAreaId\":\"mv\",\"AccountNum\":\"500210\",\"Name\":\"****\"}]"}
Код ниже создает список из этого ответа:
ClearCollect(_vendorData, MatchAll(GetVendors.Run(_token.value).value, "\{""dataAreaId"":""(?<dataAreaId>[^""]*)"",""AccountNum"":""(?<AccountNum>[^""]*)"",""Name"":""(?<Name>[^""]*)""\}"));
И я мог бы привязать номер учетной записи и имя из коллекции _vendorDatra к представлению галереи
В моем случае у меня была та же проблема, что и у вас, но мне не удалось получить данные в коллекцию _vendorData, потому что часть регулярного выражения MatchAll работала некорректно, даже если у меня был точно такой же сценарий, и я не мог заставить его работать.
Мое решение состояло в том, чтобы изменить сам поток, и я вернулся
Response
вместо
Respond to a Power app or Flow
, поэтому в основном я мог вернуть полный запрос с Http.
Это также вызвало у меня некоторые проблемы, потому что, когда я сгенерировал схему из образца, я не мог зарегистрировать поток в powerapp с ошибкой
Failed during http send request
.
Решение заключалось в том, чтобы вручную просмотреть схему ответа и изменить все типы столбцов на один из следующих трех, потому что другие не поддерживаются:
string
,
integer
или же
boolean
. Объект и массив могут быть установлены только для элементов верхнего уровня, но никогда для дочерних элементов, поэтому, если у вас есть что-то еще, кроме трех, упомянутых мной, замените его на строку. И никакое свойство не может быть оставлено с неопределенным типом.
В принципе, мне нравится это решение еще больше, потому что в самом powerapps вам не нужно выполнять какое-либо преобразование или что-то еще - просто используйте данные как есть, потому что они уже распознаются как коллекция в случае массива, и у вас есть все свойства, уже названные для ты.
Ниже приведен пример схемы шага ответа.
{
"type": "object",
"properties": {
"PropertyOne": {
"type": "string"
},
"PropertyTwo": {
"type": "integer"
},
"PropertyThree": {
"type": "boolean"
},
"PropertyFour": {
"type": "array",
"items": {
"type": "object",
"properties": {
"PropertyArray1": {
"type": "string"
},
"PropertyArray1": {
"type": "integer"
},
"PropertyArray1": {
"type": "boolean"
}
}
}
Теперь это легко.
Power Apps представила функцию ParseJSON, которая упрощает преобразование строки в коллекцию.
Таблица(ParseJSON(JSONString));
В галерее сопоставьте такие столбцы, как ThisItem.Value. Имя столбца