如何使用带 Python 的 Azure Functions Blob 触发器从 blob 存储中读取 json 文件

How to read json file from blob storage using Azure Functions Blob Trigger with Python

我在 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)

基本上你得到这个错误是因为你从流中读取了两次。第一次读取后,流的读取位置设置在流的末尾,这就是第二次读取失败的原因。

根据下面的评论,由于 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)