Azure функции: вернуть объект JSON - PullRequest
0 голосов
/ 13 июня 2019
import logging
import azure.functions as func

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = {"test":"jjj"}
    return func.HttpResponse(name)

выше - моя функция лазури (V2), использующая предварительный просмотр Python.если я возвращаю

func.HttpResponse(f"{name}") 

, это работает, но если я возвращаю объект dict, это не так.отображается ошибка

Exception: TypeError: reponse is expected to be either of str, bytes, or bytearray, got dict

, пожалуйста, помогите.

1 Ответ

1 голос
/ 14 июня 2019

Прежде всего, я не эксперт по Python.Просто пытаюсь сообщить вам, что проблема в этом.

Так что в функции Azure, если вы посмотрите, вы увидите, что ее тип возвращаемого значения равен IActionResult, если вы decompile, вы увидите

* 1006.*

Таким образом, он ожидает от вас объект, а не словарь или список или любой тип обобщенных типов.Но если вы преобразуете его в объект типа OkObjectResult, вы не столкнетесь с ошибкой компиляции.См. Пример ниже:

            IDictionary<int, string> MyDictionary = new Dictionary<int, string>();
            MyDictionary.Add(new KeyValuePair<int, string>(1, "One"));
            MyDictionary.Add(new KeyValuePair<int, string>(2, "Two"));
            ////As we have to return IAction Type So converting to IAction Class Using OkObjectResult We Even Can Use OkResult
            return new MyDictionary;

Выше кода может встретиться с ошибкой компиляции.Потому что он не поддерживает словарь или список или любой родовой напрямую.Снимок экрана ниже:

enter image description here

Посмотрите, что говорит ошибка:

enter image description here

Но если вы преобразуете свой словарь или список или любой универсальный объект в тип объекта, это точно решит вашу проблему.См. Пример ниже:

               IDictionary<int, string> MyDictionary = new Dictionary<int, string>();
                MyDictionary.Add(new KeyValuePair<int, string>(1, "One"));
                MyDictionary.Add(new KeyValuePair<int, string>(2, "Two"));

                //So have converted MyDictionary into Object type that the compiler deserve. And no compile error encountered.
                return new OkObjectResult(MyDictionary);

См. Снимок экрана ниже:

enter image description here

Примечание: Если выпопытайтесь разобрать ваш func.HttpResponse(name) в объект, а затем, наконец, вернитесь, ваша проблема должна быть решена.Поэтому вы можете добавить ссылку на этот пакет в свой проект import json и попробовать следующий код:

import json


name = {"test":"jjj"}

print(json.dumps(name))

...