JSON和对其他JSON对象的引用

JSON和对其他JSON对象的引用,json,powershell,Json,Powershell,我对powershell还不熟悉,而且我正在努力学习。我想让parse JSON对象引用Powershell中的其他JSON对象 在我的JSON文件中,我定义了一个值key=W的默认对象。我希望能够在其他JSON对象中使用这个$default.value引用,以避免在多个地方定义值 当我提取$driveletter=$json.target.driveletter键时,我无法计算出能够将字符串$default.value转换为W值的语法 这在powershell中可能吗 谢谢 斯图尔特 Exam

我对powershell还不熟悉,而且我正在努力学习。我想让parse JSON对象引用Powershell中的其他JSON对象

在我的JSON文件中,我定义了一个值key=W的默认对象。我希望能够在其他JSON对象中使用这个$default.value引用,以避免在多个地方定义值

当我提取$driveletter=$json.target.driveletter键时,我无法计算出能够将字符串$default.value转换为W值的语法

这在powershell中可能吗

谢谢

斯图尔特

Example.JSON

{default: {value: "W"},target: {driveletter: "'"$default.value"}}
doit-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字符串模板更正确地解析的字符串模板:

示例(test.json):

然后您可以执行以下操作:

$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的属性(并将其设置为默认值)

要打印目标driveletter(使用默认值替换的值),请使用:


杰出的正是我想要的。
default    target          
-------    ------          
@{value=W} @{driveletter=W}
$newJson.target.driveletter