Azure BlobClient 未将 json 正确写入存储

Azure BlobClient not writing json correctly to Storage

我有一个来自 API 响应的 json 存储在变量中。

当我打印这个变量时,我得到:

print(json)
{"items": [{"id": "123", "name": "A"}, {"id": "456", "name": "B"}], "count": 2}
print(type(json))
<class 'dict'>

我正在尝试将此 var 作为 blob 上传到 Azure Blob 容器,例如:

blob_name = 'test.json'
blob_url = f"{account_url}/{container_name}/{blob_name}"
sa_credential = DefaultAzureCredential()

blob_client = BlobClient.from_blob_url(
    blob_url=blob_url,
    credential=sa_credential
)

blob_client.upload_blob(json)

一切顺利,至此,容器中创建了一个文件,然而,文件内容为:

items=id&items=name&items=id&items=name&count=2

我期望的位置:

{"items": [{"id": "123", "name": "A"}, {"id": "456", "name": "B"}], "count": 2}

有什么想法吗?

upload_blob只能取字符串、字节或IO对象 实例作为参数。该文档没有指定 data 参数应该是什么类型。但是从 source code data 键入为 Union[Iterable[AnyStr], IO[AnyStr]]

def _upload_blob_options(  # pylint:disable=too-many-statements
            self, data,    # type: Union[Iterable[AnyStr], IO[AnyStr]]

其中 AnyStr is a type variable defined as AnyStr = TypeVar('AnyStr', str, bytes)。 因此,解决此问题的一种方法是传递 JSON 字符串而不是 Python 字典。

blob_client.upload_blob(json.dumps(json))