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)
以上是我使用python预览的azure函数(V2)。 如果我回来
func.HttpResponse(f"{name}")
它可以工作,但是如果我返回dict对象,它就不能工作。 显示的错误是
Exception: TypeError: reponse is expected to be either of str, bytes, or bytearray, got dict
请帮助。
答案 0 :(得分:10)
您需要使用内置的json库将字典转换为json字符串。 https://docs.python.org/3/library/json.html#json.dumps
然后,您可以将函数的模仿类型(Content-Type)设置为application/json
。默认情况下,Azure函数HttpResponse返回text/plain
内容类型。
import json
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(
json.dumps(name),
mimetype="application/json",
)
答案 1 :(得分:7)
更好的方式:
func.HttpResponse.mimetype = 'application/json'
func.HttpResponse.charset = 'utf-8'
return func.HttpResponse(json_object)
答案 2 :(得分:1)
首先,我不是Python专家。只是想让您知道问题的全部。
因此在Azure函数上,如果您查看,则将看到其返回类型为IActionResult
,如果您decompile
,则会看到
IActionResult IConvertToActionResult.Convert()
{
ActionResult result = this.Result;
if (result != null)
return (IActionResult) result;
return (IActionResult) new ObjectResult((object) this.Value)
{
DeclaredType = typeof (TValue)
};
}
因此,它期望您提供一个对象,而不是Dictionary或List或任何类型的泛型类型。但是,如果将其转换为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;
以上代码会遇到编译错误。因为它不直接支持Dictionary或List或任何泛型。请参见以下屏幕截图:
查看错误内容:
但是,如果将Dictionary或List或任何泛型转换为对象类型,则可以肯定地解决您的问题。参见以下示例:
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);
请参见以下屏幕截图:
注意::如果您尝试将func.HttpResponse(name)
解析为一个对象,然后最终返回,则问题应该得到解决。因此,您可以做的是尝试在项目import json
中添加对此包的引用,然后尝试以下代码:
import json
name = {"test":"jjj"}
print(json.dumps(name))
答案 3 :(得分:0)
答案 4 :(得分:0)
试试这个
import json
return func.HttpResponse (
json.dumps({
'lat': lat,
'lon': lon
})
)