【问题标题】:Single value array being converted to String - Powershell单值数组被转换为字符串 - Powershell
【发布时间】:2019-11-26 05:57:03
【问题描述】:

我正在将其转换为 JSON 并发送 POST 请求,但 ContextTypes 的值不断转换为字符串。

$postParams = @{
        instance=[PSCustomObject]@{
                instanceId= $instanceId;
                className="Permission";
                schemaName="RBAC";
                properties= @{
                        Name= $Name;
                        Description= $Description;
                        ServiceGPRId= 1;
                        CategoryId= 1;
                        ContextTypes=@('Object')
                };
         }
    } | ConvertTo-Json

返回:

{
"instance":  {
                 "instanceId":  null,
                 "className":  "Permission",
                 "schemaName":  "RBAC",
                 "properties":  {
                                    "CategoryId":  1,
                                    "ServiceGPRId":  1,
                                    "Description":  null,
                                    "Name":  null,
                                    "ContextTypes":  "Object"
                                }
}}

我已经看过其他答案并且也尝试过(@(...)),但它不起作用。出于某种原因,如果我在 properties 对象之外定义相同的名称-值对,它可以正常工作并返回:

{
"instance":  {
                 "instanceId":  null,
                 "className":  "Permission",
                 "schemaName":  "RBAC",
                 "ContextTypes":  [
                                      "Object"
                                  ],
                 "properties":  {
                                    "CategoryId":  1,
                                    "ServiceGPRId":  1,
                                    "Description":  null,
                                    "Name":  null
                                }                    
             }

}

我还尝试使用 -InputObject 方法将其转换为 Json,但结果相同。 如何确保 ContextTypes 仍然是一个数组?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您需要将-Depth 3 添加到您的ConvertTo-Json 调用中,以确保您的对象图被序列化到其全部深度:

    @{
            instance= [PSCustomObject] @{
                    instanceId= $instanceId
                    className="Permission"
                    schemaName="RBAC"
                    properties= [PSCustomObject] @{
                            Name= $Name
                            Description= $Description
                            ServiceGPRId = 1
                            CategoryId = 1
                            ContextTypes = @('Object')
                    }
             }
    } | ConvertTo-Json -Depth 3
    

    不幸的是,-Depth 默认为 2,这解释了你的 - 微妙 - 症状:本质上,你的数组被序列化为其字符串扩展值,它只产生了它的(唯一)元素(例如,"$(@('foo'))" 产生'foo')。

    有关背景信息,请参阅:

    【讨论】:

    • 很高兴听到这个消息,@DivisionSi;我的荣幸。
    猜你喜欢
    • 2017-11-07
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多