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

PowerShell JSON互转格式不符问题咨询

解决PowerShell ConvertTo-Json适配REST请求的格式问题

嘿,我之前对接REST API时也踩过ConvertTo-Json的坑,它默认的序列化行为有时候确实会和API预期的格式对不上,咱们一步步来搞定你的问题。

首先先拆解下你的原始JSON结构:外层是property-content数组,里面的对象包含数组类型的timestamps、values,还有两个空字符串属性。常见的问题点和解决方法如下:

1. 核心问题:默认序列化深度不够

PowerShell的ConvertFrom-Json会把JSON转成PSCustomObject,但ConvertTo-Json默认的序列化深度只有2层。如果你的修改操作让对象嵌套变深(哪怕只是在数组里加元素),就可能导致结构被截断,输出不符合预期。

解决方法:序列化时一定要指定足够大的-Depth参数,比如-Depth 10(根据你的实际嵌套层级调整,只要比实际层级大就行)。

2. 完整操作示例

下面是从解析到修改再到序列化的完整代码,完全贴合你的场景:

# 原始JSON字符串
$originalJson = '{ "property-content": [ { "statKey": "Test|Test1", "timestamps": [1522678260000], "values": ["compliant"], "others": "", "otherAttributes": "" } ] }'

# 解析为PSCustomObject
$jsonObject = $originalJson | ConvertFrom-Json

# 修改你需要的属性值(示例:更新statKey,添加新的时间戳)
$jsonObject.'property-content'[0].statKey = "Test|UpdatedTest"
$jsonObject.'property-content'[0].timestamps += 1522764660000

# 关键:指定深度序列化,确保结构完整
# -Compress:$false 生成格式化的JSON方便调试,需要压缩的话改成 -Compress
$finalJson = $jsonObject | ConvertTo-Json -Depth 10 -Compress:$false

执行后输出的JSON格式会和原始结构完全一致,符合REST请求的要求:

{
  "property-content": [
    {
      "statKey": "Test|UpdatedTest",
      "timestamps": [
        1522678260000,
        1522764660000
      ],
      "values": [
        "compliant"
      ],
      "others": "",
      "otherAttributes": ""
    }
  ]
}

3. 额外注意事项

  • 空字符串不要转为null:如果修改时不小心把others或otherAttributes设为$null,序列化后会变成null而不是"",一定要显式赋值为空字符串:
    $jsonObject.'property-content'[0].others = ""
    
  • 保持类型一致性:比如timestamps是数字数组,添加元素时要确保是数字类型,别写成字符串(比如1522764660000而不是"1522764660000"),否则序列化后会变成字符串数组,不符合API预期。
  • 属性大小写保留:PowerShell会保留原始属性名的大小写,所以直接用$jsonObject.'property-content'这种方式访问,别改成驼峰或其他格式。

内容的提问来源于stack exchange,提问作者Kevin Brüsch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:38:28