我是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"}}
must-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
将您的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 target
------- ------
@{value=W} @{driveletter=W}
您可以访问$ newJson.targer.driveletter的属性(它将设置为默认值)
要打印目标驱动器号(使用默认值替换的值),请使用:
$newJson.target.driveletter
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句