如何通过Python使用Azure函数blob触发器从blob存储中读取json文件

如何通过Python使用Azure函数blob触发器从blob存储中读取json文件,python,json,azure,azure-functions,azure-blob-trigger,Python,Json,Azure,Azure Functions,Azure Blob Trigger,我在Azure Function App中创建了一个BlobTrigger,用于读取在我的Azure Blob存储中插入或更新的任何新文件 触发器工作正常,可以识别在blob容器中插入或更新的最新文件,并且可以打印文件的json正文 但是,当我试图将json对象存储在变量中进行转换时,它会抛出一个错误 我想将json的每个键分配给一个变量。 我的json是 { "name":"Saikat", "id":"

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

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

但是,当我试图将json对象存储在变量中进行转换时,它会抛出一个错误

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

   {
    "name":"Saikat",
    "id":"1234"
   }
下面是我在尝试存储json时可以打印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))


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

根据下面的注释,由于InputStream BytesIO对象不包含seek操作,因此问题的解决方案是只读取一次流

请尝试以下操作:

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)

非常感谢你清楚地解释了这个问题。我现在可以通过在第一个实例中捕获json文件来存储它。在使用seek时,我得到了这个错误“异常:不支持操作:seek”。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)