「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

PowerShell ConvertTo-Json 文字数制限 によってデータが途中で省略され、正しい JSON が出力されない問題に悩んだ経験はありませんか?特に API 連携や大容量オブジェクトの JSON 化を行う際に頻発します。

本記事では、PowerShell の ConvertTo-Json で起きる文字数制限問題の原因と、実務で使える解決方法を徹底解説します。


ConvertTo-Json の文字数制限が発生する原因

✔ 1. 既定では深さ (-Depth) が 2 に制限されている

PowerShell の ConvertTo-Json は、デフォルトでは 階層の深さが 2 に制限されています。
そのため、深い階層のデータは "..." に省略され、結果として実質的に文字制限のような状態になります。

▼ 例:階層が深いオブジェクトの場合

▼ 出力結果(省略)


✔ 2. PowerShell 5.x 以前では JSON の最大展開サイズが小さい

PowerShell 5.x 以前では内部的に制限がキツく、特に大量データを扱うと 途中で切れる(省略される) ことがあります。
これは純粋な文字数制限というより、PowerShell 内部のオブジェクト展開の限界です。


解決方法:ConvertTo-Json の出力制限を回避する方法

-Depth を十分大きく指定する

最も重要な対策は -Depth の指定です。

$data | ConvertTo-Json -Depth 99
  • API 連携など階層が深い可能性がある場合は 99 にするのが現場の定番

  • 省略されている "..." 表示を回避できる


② JSON を整形せず出力する(-Compress を使う)

スペースや改行が多いとサイズが膨らむため、圧縮して出力することで回避できることがあります。


③ PowerShell 7 以降の使用を検討する

PowerShell 7 以降では、JSON 出力仕様が改善され、より大規模なデータ扱いが可能。

バージョン特徴
Windows PowerShell 5.1JSON の階層と容量制限が比較的厳しい
PowerShell 7+省略の発生確率が低く高速処理可能


④ 文字列を一旦 Out-String+エンコードで処理する回避策

どうしても切れる場合、文字列にしてしまうテクニックがあります。

または Base64 化して転送するケースもあります。


よくある事例:Web API 送信時に途中で切れる

REST API に JSON データを送ろうとして以下のケースが多発します。

解決例


まとめ

発生原因具体的解決策
階層深度制限 (Depth = 2)ConvertTo-Json -Depth 99
JSON の膨張-Compress を利用
PowerShell 旧バージョン利用PowerShell 7 へ移行
大容量データ送信Out-String や Base64 変換

ConvertTo-Json の文字制限問題の多くは -Depth 99 で解決します。
業務の JSON 送信・ログの生成・API システム連携で必須の知識です。

Ads by Google