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