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をコピーしました