python - 如何使用 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)
解决方案
本质上,您收到此错误是因为您从流中读取了两次。在第一次读取之后,流的读取位置设置在流的末尾,这就是您的第二次读取失败的原因。
根据下面的评论,由于 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)
推荐阅读
- javascript - 编辑屏蔽输入时如何获得正确的值(自定义屏蔽)
- c# - 对对象的反序列化 API 调用在 List 上不起作用
- javascript - 如何将 json 字典从 javascript .get 传递给 django 模板?
- reactjs - react useEffect :像'authService._user'这样的外部范围值不是有效的依赖关系,因为改变它们不会重新渲染组件
- android - SeekBar 仅向拇指添加填充
- c# - 如何使字符串中每个单词的第一个或最后一个字母小写
- javascript - 有没有一种有效的方法可以在 JSON 数据中找到特定条目?
- c++ - 在鼠标按下时移动 SDL2 窗口的功能会闪烁窗口并且移动不够“快”
- .net-core - .Net Core Console App Hosting Signalr Hub 导致 GetStreamItemType 没有实现异常
- css - 在 Bootstrap 4 中单击 DropdownItem 列表时如何更改 DropdownToggle 背景颜色