我尝试使用PowerShell对JSON文件执行一些配置转换。 为此,有几个输入json文件和一个转换文件(每个环境一个)。
输入样本(AzureStorage.json
):
{
"$schema": "http://datafactories.schema.management.azure.com/schemas/2015-09-01/Microsoft.DataFactory.LinkedService.json",
"name": "AzureStorage",
"properties": {
"type": "AzureStorage",
"typeProperties": {
"connectionString": "My Connection String here"
} } }
变换:
{
"$schema": "http://datafactories.schema.management.azure.com/vsschemas/V1/Microsoft.DataFactory.Config.json",
"AzureStorage": [
{
"name": "$.properties.typeProperties.connectionString",
"value": "DefaultEndpointsProtocol=https;AccountName=mytestaccount;AccountKey=d;lasfjdalfdjfldjfdsfds;EndpointSuffix=core.windows.net"
}
],
"DataLakeStore": [
{
"name": "$.properties.typeProperties.dataLakeStoreUri",
"value": "https://mydatalake.azuredatalakestore.net/webhdfs/v1"
}
]
}
我需要做的是加载转换文件,然后遍历它,找到我需要转换的输入文件的名称(在本例中为AzureStorage.json
和DataLakeStore.json
)。
接下来,我需要相应地替换属性。我试图通过使用ConvertFrom-Json
将转换文件加载到变量中来实现,但我不确定如何在之后遍历它。
答案 0 :(得分:1)
我完全不知道你需要的帽子。我猜测访问JSON文件中的信息。
这种做法怎么样?
$json_object = Get-Content -Raw -Path '<your_path>\transform.json' | ConvertFrom-Json
$azure_storage = @('AzureStorage'; 'DataLakeStore')
ForEach ($azure in $json_object) {
ForEach ($storage in $azure_storage) {
Write-Output $azure.$storage.name
Write-Output $azure.$storage.value
}
}
修改由于编辑我得到了它。您需要通用访问权限。
你走了:
$json_object = (Get-Content -Path '<your_path>\transform.json') -join "`n" | ConvertFrom-Json
ForEach ($object in $json_object.PsObject.Properties.value) {
Write-Output $object.name
Write-Output $object.value
}
说明:
(Get-Content -Path '<your_path>\transform.json') -join "
n“`是一种Microsoft's MSDN推荐的读取json文件的方法。
您需要找出值的位置。您正在使用的对象是“Windows PowerShell自定义对象” - PsObject。要访问您需要使用.Properties.value
。然后你有了你想要的字符串,你可以使用.name
和.value
访问它们。