#python #json #azure #azure-functions #azure-blob-trigger
Вопрос:
Я создал BLOB-триггер в приложении функций Azure для чтения любого нового файла, вставляемого или обновляемого в хранилище больших двоичных объектов Azure.
Триггер работает правильно, чтобы идентифицировать последние файлы, вставленные или обновленные в мой контейнер больших двоичных объектов, а также я могу распечатать тело файла в формате 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)
Ответ №1:
По сути, вы получаете эту ошибку, потому что вы дважды читаете из потока. После 1-го чтения позиция чтения потока устанавливается в конце потока, и именно поэтому ваше 2-е чтение завершается неудачей.
Основываясь на приведенных ниже комментариях, поскольку объект 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)
Комментарии:
1. Большое спасибо за четкое объяснение проблемы. Теперь я могу сохранить файл json, записав его в первом экземпляре. При использовании поиска я получаю эту ошибку «Исключение: отменена операция: поиск». Похоже, что объект InputStream BytesIO не содержит операции поиска. github.com/Azure/azure-functions-python-worker/issues/… огромное спасибо
2. Спасибо за дополнительную информацию. Я в основном смоделировал это, прочитав из локального файла.
3. Обновил свой ответ на основе ваших комментариев.