Serialization / Data Format

JSON文字列とJSONオブジェクトの違いは

JSON文字列をパース(インスタンス化)してJSONオブジェクトになります。APIが返すのはJSONオブジェクトではなく、JSON文字列です。利用側がJSON文字列をパースして始めてJSONオブジェクトになります。(コンテントタイプ(Content-Type)にapplication/jsonってありますが、これはレスポンスボディが “JSON形式のテキスト” であることを示すだけです。)

JSON 文字列 JSON オブジェクト パース ( parse ) シリアライズ ( serialize )

パースとは、文字列を読み取りながら JSON の構造が正しいかどうかを一文字ずつチェックし、問題がなければデータ構造に変換する処理です。つまりパースには必ずバリデーションが含まれています。不正な JSON はパースの途中でエラーになります。言い方を変えるとJSON文字列は、パースが成功して初めて JSONオブジェクトになれる。パースに失敗した時点で、それは JSON ですらない。JSONとして成立しないって事になります。

開発言語によっていろんなパースがあります

主要言語の JSON パース比較 言語 パース方法 型 備考 JavaScript JSON.parse(json) JS Object 標準 Java(Jackson) mapper.readTree(json) JsonNode 最も一般的 Python json.loads(json) dict 標準 Go json.Unmarshal(…) struct / map 型安全 (Type Safety) C# (.NET) JsonSerializer.Deserialize クラス System.Text.Json Ruby JSON.parse(json) Hash 標準 PHP json_decode($json, true) 連想配列 true で配列 bash(+ jq) echo “$json” | jq ‘.’ ※保持不可 jq がパースして整形 補足:Go の型安全について Go の型安全とは、JSON の型ズレを自動変換せず、struct と一致しない場合はエラーにする厳密な型チェックのことです。 事前に型を定義する点は Java と同じですが、Java は暗黙の型変換で受け入れる場合があるのに対し、Go は必ずエラーとして扱います。

Javaのパース方法(ライブラリ別)

Java の JSON パース方法比較 ライブラリ パース方法 型 備考 Jackson(ObjectMapper) mapper.readValue(json, User.class) POJO 最も一般的 Jackson(Tree Model) mapper.readTree(json) JsonNode 動的 JSON Jackson(Streaming) JsonParser でトークン読み取り トークン 超高速 Gson(POJO) gson.fromJson(json, User.class) POJO 軽量 Gson(JsonObject) JsonParser.parseString(json)… JsonObject 動的操作 JSON-B jsonb.fromJson(json, User.class) POJO Jakarta EE JSON-P Json.createReader(…).readObject() JsonObject 低レベル org.json new JSONObject(json) JSONObject 古い
スポンサーリンク
タイトルとURLをコピーしました