You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测PowerShell中JSON对象属性的数据类型?现有代码为何失效?

PowerShell获取JSON属性值类型并生成带引号的CSV字符串

为什么原代码无法获取属性值的实际类型

你之前的代码里,Get-Member -MemberType Properties返回的是属性的元数据对象(类型为MemberDefinition),而不是属性的实际值。所以你调用$_.GetType()时,拿到的是这个元数据对象的类型,自然看不到string或int这类值的类型。

查看属性值的实际类型

要获取属性值的类型,需要通过属性名称去提取$json.attrs对应的属性值,再判断其类型:

$str = '{"attrs": { "c1": "abc", "c2": 123}}'
$json = $str | ConvertFrom-Json

$json.attrs | Get-Member -MemberType Properties | ForEach-Object {
    # 通过属性名获取实际值
    $propValue = $json.attrs.$($_.Name)
    # 输出属性名和对应的类型名称
    "属性`"$($_.Name)`"的类型是: $($propValue.GetType().Name)"
}

运行后会输出:

属性"c1"的类型是: String
属性"c2"的类型是: Int32

生成带引号的CSV字符串

针对你需要的CSV生成需求,修改代码如下,判断属性值是否为string类型,为字符串值添加双引号:

$str = '{"attrs": { "c1": "abc", "c2": 123}}'
$json = $str | ConvertFrom-Json

# 遍历属性并处理每个值
$csvSegments = $json.attrs | Get-Member -MemberType Properties | ForEach-Object {
    $propValue = $json.attrs.$($_.Name)
    # 判断是否为字符串类型
    if ($propValue -is [string]) {
        # 为字符串添加双引号
        "`"$propValue`""
    } else {
        # 非字符串类型直接转为字符串
        $propValue.ToString()
    }
}

# 拼接成CSV格式的字符串
$finalCsv = $csvSegments -join ','
Write-Output $finalCsv

运行后会输出:

"abc",123

关键说明

  • 使用-is [string]判断类型比GetType().Name -eq "String"更灵活,能兼容所有派生自string的类型
  • 非字符串类型调用ToString()确保输出为字符串格式,避免直接输出对象导致的格式异常
  • 必须通过$json.attrs.$($_.Name)获取属性的实际值,$_本身是属性的元数据对象,不是值

内容的提问来源于stack exchange,提问作者ca9163d9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:15:57