JEP 540 は、JDK 28 に向けて `jdk.incubator.json` というインキュベータモジュールで JSON のパースと生成の標準 API を追加する提案である。ステータスは Targeted で、2014年に書かれた前身の JEP 198 を置き換える。
動機は、単純な JSON 処理のために Jackson や Gson のような外部ライブラリを導入したくない場面があることである。たとえば REST API のレスポンスから特定の値を取り出して集計するだけの作業でも、Java では外部ライブラリなしに書きにくかった。この API は、そうした単純作業を Python や Go 並みの短さで書けるようにすることを目標にしていて、データバインディングやストリーミングのような高度な機能は非目標としている。
APIは `JsonValue` という sealed interface を中心に構成される。JSON の値は文字列・数値・真偽値・null・オブジェクト・配列の6種類しかなく、それぞれに対応する `JsonString`・`JsonNumber`・`JsonBoolean`・`JsonNull`・`JsonObject`・`JsonArray` が `JsonValue` の全てのサブタイプになる。sealed であることによって、switch式で default 節なしに全パターンを網羅できる。
パースした後は `JsonObject` や `JsonArray` へ明示的にダウンキャストしなくても、`get(String)` や `get(int)` で子要素をたどれる。これはJSON文書がスキーマを持たないという性質に対応していて、既知の構造を持つ文書からデータを取り出すコード自体が実質的なスキーマとして読めることを目指している。
パースは RFC 8259 に厳密に従い、トレーリングカンマのような構文拡張は認めない。オブジェクト内のメンバー名の重複も許可されておらず、違反すると `JsonParseException` がパス付きの詳細なメッセージとともに投げられる。