首页 > 解决方案 > 如何使用 Azure Functions Blob Trigger 和 Python 从 Blob 存储中读取 json 文件

问题描述

我在 Azure Function App 中创建了一个 BlobTrigger 来读取在我的 Azure Blob 存储中插入或更新的任何新文件。

触发器正常工作以识别在我的 blob 容器中插入或更新的最新文件,并且我能够打印文件的 json 正文。

但是,当我尝试将 json 对象存储在变量中以对其进行转换时,它会引发错误。

我想将json的每个键分配给一个变量。我的json是

   {
    "name":"Saikat",
    "id":"1234"
   }

下面是我在尝试存储它时可以打印 json 和错误的代码。

   import logging
   import azure.functions as func
   import json

   def main(myblob: func.InputStream):
       logging.info(f"Python blob trigger function processed blob \n"
                 f"Name: {myblob.name}\n"
                 f"Blob Size: {myblob.length} bytes")
        print("JSON Body",json.load(myblob))

在此处输入图像描述

   import logging
   import azure.functions as func
   import json

   def main(myblob: func.InputStream):
       logging.info(f"Python blob trigger function processed blob \n"
                 f"Name: {myblob.name}\n"
                 f"Blob Size: {myblob.length} bytes")
        print("JSON Body",json.load(myblob))
        #Store JSON file
        jsonData= json.load(myblob)
        print("****jsonData*****",jsonData)

在此处输入图像描述

标签: pythonjsonazureazure-functionsazure-blob-trigger

解决方案


本质上,您收到此错误是因为您从流中读取了两次。在第一次读取之后,流的读取位置设置在流的末尾,这就是您的第二次读取失败的原因。

根据下面的评论,由于 InputStream BytesIO 对象不包含查找操作,因此您的问题的解决方案是只读取一次流。

尝试以下操作:

import logging
import azure.functions as func
import json

def main(myblob: func.InputStream):
    logging.info(f"Python blob trigger function processed blob \n"
                f"Name: {myblob.name}\n"
                f"Blob Size: {myblob.length} bytes")
    jsonData= json.load(myblob)
    print("JSON Body",jsonData)

    #Store JSON file
    print("****jsonData*****",jsonData)

推荐阅读