JSON和对其他JSON对象的引用

时间:2016-02-22 06:22:01

标签: json powershell

我是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

1 个答案:

答案 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