JSON / byte検算ガイド

JSON本文と送信文字列のbyte数を分けて検算する

JSONを読み込んだ後の「データ」と、APIへ送るserialized文字列は同じ見た目でもbyte数が違うことがあります。API上限に合わせるときは、実際に送るUTF-8文字列を測ります。

上限はwire representationで判定する

fixture文字数UTF-8 bytes判定対象
unicode2939送信文字列
escaped5454送信文字列
ascii2929送信文字列

API上限と比べるのは、整形前後やエスケープを含む、実際に送る文字列です。

fixtureをローカルで再現する

unicode.jsonは日本語本文、escaped.txt\u表記のserialized文字列、ascii.jsonはASCII本文です。expected.csvのbyte数は改行を含めず、各行の内容をUTF-8で測った値です。

const bytes = new TextEncoder().encode(serialized).length;
+// compare bytes with the API limit

文字数が同じでも、Unicode文字はUTF-8 bytesが増えます。エスケープは文字列自体が長くなる場合があります。

検算してAPIへ渡す

  1. APIへ送るserialized文字列をそのまま固定する。
  2. UTF-8 bytesを測り、expected.csvと突き合わせる。
  3. API上限・余裕・改行やescapeの扱いを記録する。
  4. checklist.mdを添えて、byte判定の根拠を渡す。

このガイドはブラウザー内の静的資料です。JSONや入力内容を外部へ送信しません。

文字数だけでfitと断定しない

非ASCII文字、escape、空白、改行、JSON serializerの設定が変わるとbyte数も変わります。API limitの判定は、実際のwire stringを測ってから行います。