我是PowerShell的新手,并试图精益求精。我想解析在Powershell中引用其他JSON对象的JSON对象。
在我的JSON文件中,我定义了一个值为key = W的默认对象。我希望能够在其他JSON对象中使用此$ default.value引用,以避免有多个定义值的位置。
当我提取密钥$ driveletter = $ json.target.driveletter
时,我无法计算出能够将字符串$ default.value变为W值的语法这是否可以在powershell中使用?
由于
斯图尔特
Example.JSON
{default: {value: "W"},target: {driveletter: "'"$default.value"}}
度特-example.ps1
$json = (Get-Content "example.json" -Raw) | ConvertFrom-Json
#
#Create object called default that I can reference from other objects
#
$default=$json.default
$default.value
#
# How do I use the string in the json.target.driveletter
#
$json.target.driveletter
$driveletter=$json.target.driveletter
$driveletter
$json.target.driveletter.GetType()
输出
.\doit-example.ps1
W
$default.value
$default.value
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
答案 0 :(得分:2)
将您的json文件模板更改为可以作为powershell-string模板更正确地解析的字符串模板:
示例(test.json):
{default: {value: "W"},target: {driveletter: "$($default.value)"}}
然后你可以做到以下几点:
$file = "C:\tmp\test.json";
# Read the "template json with defaults"
$json = (Get-Content $file -Raw) | ConvertFrom-Json
# Read the raw content into a variable for expansion
$rawContent = (Get-Content $file -Raw);
# Set the default object (to be able to expand string)
$default = $json.default;
# Your new json
$newJson = ($ExecutionContext.InvokeCommand.ExpandString($rawContent)) | ConvertFrom-Json
这将使用您设置的任何默认对象替换“json”模板的内容。请注意,在使用expandstring时,您需要在会话中设置“default”。
此示例的输出将产生:
default target
------- ------
@{value=W} @{driveletter=W}
你可以访问你的$ newJson.targer.driveletter(并将它设置为你的默认值)
要打印目标driveletter(默认值替换为值),请使用:
$newJson.target.driveletter