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

ConvertTo-Json执行挂起问题排查及解决方法咨询

问题分析与解决办法

原因说明

这不是ConvertTo-Json的bug,问题出在你处理的是非标准JSON:原始文件里的formatter是JavaScript函数定义,而标准JSON只允许字符串、数字、布尔值、数组、对象、null作为值类型。当你把包含该函数的JSON字符串放入哈希表,再通过ConvertTo-Json序列化时,函数代码中的递归引用逻辑(比如context.chart.data.labels[idx])会导致ConvertTo-Json陷入无限递归处理,最终出现挂起且无法响应终止信号的情况。

解决方案

方案1:直接拼接JSON字符串(推荐)

如果你只是想把原始JSON包装到chart键下的新JSON对象中,无需使用ConvertTo-Json,直接手动拼接字符串即可绕过序列化问题:

"{`"chart`": $(Get-Content C:\temp\minimal.json -Raw)}"

方案2:移除非标准JSON内容

如果必须使用ConvertTo-Json,先修改原始JSON文件,移除其中的JavaScript函数部分(因为标准JSON不支持函数),比如将plugins.datalabels下的formatter字段删除,修改后的JSON如下:

{"data":  {"labels":  ["GERMAN AMERICAN BANK","JOHNSON BANK","WASHINGTON TRUST BANK"],"datasets":  [{"data":  [{"y":  43.84,"x":  51},{"y":  47.02,"x":  12},{"y":  58.21,"x":  53}],"label":  "data"}]},"options":  {"title":  {"text":  "Banks","display":  true},"scales":  {},"plugins":  {"datalabels":  {"display":  true}}},"type":  "scatter"}

之后再执行你的原命令就不会出现挂起。

方案3:使用第三方JSON处理模块

使用Newtonsoft.Json模块(对非标准JSON兼容性更好)来处理:

  1. 先安装模块:
Install-Module -Name PowerShellGet -Force -AllowClobber
Install-Module -Name Newtonsoft.Json -Force
  1. 执行处理命令:
$chartContent = Get-Content C:\temp\minimal.json -Raw
$jsonObject = @{ chart = $chartContent }
[Newtonsoft.Json.JsonConvert]::SerializeObject($jsonObject)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:45:04