[英]Read JSON file from Azure Blob Storage using PowerShell script and write back to another file in blob storage
I have following JSON file (product.json) stored in Azure Blob storage.我有以下 JSON 文件(product.json)存储在 Azure Blob 存储中。 Is it possible to write PowerShell script to read this file from blob storage make some changes and write back to another file.
是否可以编写 PowerShell 脚本从 blob 存储读取此文件进行一些更改并写回另一个文件。 The output file I would like where following changes should occur:
output 文件我想在哪里发生以下更改:
Product.json产品.json
[
{
"_id": "9f4da9d6babeb9d411c896baa68c94c8",
"_rev": "1-4259271795225df18768ab68baacc96c",
"account_id": 692278,
"limit": 10000,
"products": [
"Commodity",
"InvestmentStock"
]
},
{
"_id": "cc4b59f585b8556a2bedca78294a0797",
"_rev": "1-410e479257faba0457bd9b4816c4dc95",
"account_id": 328304,
"limit": 10000,
"products": [
"Derivatives",
"InvestmentStock",
"CurrencyService"
]
},
{
"_id": "d7e2a72963cff2760514ff772969ffe0",
"_rev": "1-2ec6e2679eae13b76410c93f49c14c4a",
"account_id": 674364,
"limit": 10000,
"products": [
"InvestmentStock"
]
}
]
The outputfile.json should be as follows: outputfile.json应该如下:
[
{
"id": "9f4da9d6babeb9d411c896baa68c94c8",
"account_id": 692278,
"limit": 10000,
"products": [
"Commodity",
"InvestmentStock"
]
},
{
"id": "cc4b59f585b8556a2bedca78294a0797",
"account_id": 328304,
"limit": 10000,
"products": [
"Derivatives",
"InvestmentStock",
"CurrencyService"
]
},
{
"id": "d7e2a72963cff2760514ff772969ffe0",
"account_id": 674364,
"limit": 10000,
"products": [
"InvestmentStock"
]
}
]
Not the most elegant way, but this should do the trick:不是最优雅的方式,但这应该可以解决问题:
$accountName = "account-name"
$accountKey = "account-key"
$containerName = "container-name"
$blobName = "Product.json"
$outputBlobName = "Output.json"
$ctx = New-AzStorageContext -StorageAccountName $accountName -StorageAccountKey $accountKey
#Read blob and save it to local file
Get-AzStorageBlobContent -Blob $blobName -Container $containerName -Destination "Product.json" -Context $ctx
#Read local file and get JSON object
$jsonContent = Get-Content -Raw -Path "Product.json" | ConvertFrom-Json
#Loop through json content and manipulate it
For ($i=0; $i -lt $jsonContent.Length; $i++) {
$jsonContent[$i] | Add-Member -NotePropertyName "id" -NotePropertyValue $jsonContent[$i]._id
$jsonContent[$i].PsObject.Properties.Remove("_id")
$jsonContent[$i].PsObject.Properties.Remove("_rev")
}
$jsonContent
#Write content back to local disk
$jsonContent | ConvertTo-Json | Set-Content -Path $outputBlobName
#Upload into Azure Storage
$properties = @{"ContentType" = "application/json"}
Set-AzStorageBlobContent -File $outputBlobName -Container $containerName -Blob $outputBlobName -Properties $properties -Context $ctx
If you want to store the file in memory, you can use the DownloadText()
method to download the content into memory.如果要将文件存储在 memory 中,可以使用
DownloadText()
方法将内容下载到 memory 中。
The sample code:示例代码:
$accountName = "xxx"
$accountKey = "xxx"
$containerName = "xxx"
$blobName = "Product.json"
$outputBlobName = "Output.json"
$context = New-AzStorageContext -StorageAccountName $accountName -StorageAccountKey $accountKey
$container_client = Get-AzStorageContainer -Name $containerName -Context $context
$source_blob_client = $container_client.CloudBlobContainer.GetBlockBlobReference($blobName)
#download the blob as text into memory
$download_file = $source_blob_client.DownloadText()
$jsonContent = $download_file | ConvertFrom-Json
#Loop through json content and manipulate it
For ($i=0; $i -lt $jsonContent.Length; $i++) {
$jsonContent[$i] | Add-Member -NotePropertyName "id" -NotePropertyValue $jsonContent[$i]._id
$jsonContent[$i].PsObject.Properties.Remove("_id")
$jsonContent[$i].PsObject.Properties.Remove("_rev")
}
$replaced_json = $jsonContent | ConvertTo-Json
#upload the json file
$dest_blob_client = $container_client.CloudBlobContainer.GetBlockBlobReference($outputBlobName)
$dest_blob_client.Properties.ContentType = "application/json"
$dest_blob_client.UploadText($replaced_json)
Write-Output("**completed**")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.