在JSON中使用Powershell变量

问题描述

我正在尝试通过Powershell中的函数传递参数,但是它不起作用

代码

function test($test1,$test2)
{
 $details = @"
{ "updateDetails": [
    {
        "customer": "John","rank": $test1
    },{
        "school": "western","address": $test2
    }
    ]
}
"@
return $details
}
test 0 florida

当前问题

{ "updateDetails": [
    {
        "customer": "John","rank": 
    },"address": florida
    }
    ]
}

我尝试运行测试,但细节json中未填充值0,佛罗里达州已正确填充。如何替换两个值。还有佛罗里达怎么能成串

解决方法

您的代码完全正确。我运行了您的示例,它按预期运行。也许您错过了更新功能。关闭外壳,然后再试一次。

要将"florida"作为字符串包含在内,您可以简单地在变量"$test2"周围加上引号,甚至更安全:使用ConvertTo-Json输出正确引用和转义的JSON字符串:

function test {
    param ([int]$rank,[string]$address)
    return @"
    { "updateDetails": [
        {
            "customer": "John","rank": $rank
        },{
            "school": "western","address": $(ConvertTo-Json $address)
        }
        ]
    }
"@
}
test 0 florida
,

0为我填写,但佛罗里达州没有引号,这是无效的JSON。 为了使生活更轻松,请构建一个对象字符串,然后考虑使用内置cmdlet ConvertTo-Json将其转换为JSON。

在此示例中,我将向您展示如何使用哈希表

function test($test1,$test2)
{
 $details = @{ 
 "updateDetails"= 
 @(
    @{
        "customer" = "John"
        "rank" = $test1
    },@{
        "school" = "western"
        "address" = $test2
    }
    )
}

return $details | ConvertTo-Json
}

test 0 florida

输出

{
    "updateDetails":  [
                          {
                              "customer":  "John","rank":  0
                          },{
                              "school":  "western","address":  "florida"
                          }
                      ]
}