Skip to content

MS_JSON

nishi_74322014 edited this page Aug 3, 2026 · 1 revision

JSON

概要

JSON とは、

  • 軽量なデータ記述言語。
  • 構文は JavaScript (ECMAScript) のオブジェクトの表記法をベースとしている。
  • JavaScript 専用ではなく、多様なテクノロジ間におけるデータの受け渡しに使える。
  • 2006 年 7 月に RFC 4627 で仕様が規定され、
    MIME タイプは application/json、拡張子は json とされた。

補足(最新化): 現行の仕様は RFC 8259(2017 年、STD 90)である。 RFC 4627 → 7159 → 8259 と改訂されており、 RFC 8259 で「交換される JSON テキストは UTF-8 でエンコードしなければならない」 と明確化された。 同内容の標準として ECMA-404 もある。

なお、JSON は JavaScript のサブセット「ではない」時期があった。 U+2028 / U+2029 が JavaScript の文字列リテラル中で使えなかったためで、 これは ES2019 の「JSON superset」提案で解消された。

詳細

以下の文字列。

配列

  • [ ... ]
  • [ "aaa", "bbb", "ccc" ]

オブジェクト

  • { ... }
  • { "key" : xxx }

Key

常に文字列リテラル(ダブル・クォーテーション)。

Value

  • 文字列、数値(十進数の整数、少数、指数)、真偽
  • null、オブジェクト、配列

補足: 実務でハマる点を挙げておく。

  • 数値の精度: JSON の数値には型の区別が無く、 多くのパーサが IEEE 754 倍精度で扱う。 64bit 整数(long)の ID をそのまま出すと JavaScript 側で精度が落ちる(2^53 超)。 ID は文字列で送るのが安全である。
  • キーの重複: 仕様上は「あるべきでない」とされるだけで エラーではなく、パーサ依存で最後勝ち/最初勝ちが分かれる。
  • コメントが書けない: 設定ファイル用途では JSONC / JSON5 のような方言が使われる(相互運用性は無い)。

エスケープ

ECMAScript との相違点は以下の 2 点。

  • シングル・クォーテーションが対象外
  • スラッシュが対象

利用方法

方法 内容
JSON.parse() 文字列を解析してオブジェクトにする(JSONのparseを色々試してみた。: MS_JSONParseExperiments.md
JSON.stringify() オブジェクトを JSON 文字列にする
eval() JSON を解析した結果をオブジェクト型にできるが、少々危険なので JSON.parse() を使用する

補足: eval() が危険なのは、 受信した文字列がそのままコードとして実行されるためである。 信頼できないデータでは任意コード実行になる。 歴史的な理由で残っているだけなので、使わないこと。

.NETでの扱い

補足(最新化): .NET の JSON ライブラリは 2 系統ある。

ライブラリ 位置付け
System.Text.Json .NET Core 3.0 以降の標準。高速・低アロケーション
Newtonsoft.Json (Json.NET) 従来の事実上の標準。機能は依然として豊富

移行時の主な差異は次のとおり。

  • System.Text.Json は既定で キャメルケース変換をしないJsonSerializerOptions.PropertyNamingPolicy で指定する)
  • 既定で 大文字小文字を区別するPropertyNameCaseInsensitive = true で従来動作)
  • 既定で コメント・末尾カンマを許可しない

ASP.NET Web APICamelCasePropertyNamesContractResolver は Json.NET の機能であり、 ASP.NET Core では既定でキャメルケースになる。

関連情報

WebAPI

方式

作成方法

  • JSONを送信するRESTサービスを作成する方法(MS_JSONRestService.md
  • JSONを受信するJSON-RPCサービスを作成する方法(MS_JSONRPCService.md

JWT(JSON Web Token)

JWTは JSON をベースにしたトークン形式である。

参考


Tags: IT国際標準, プログラミング, 通信技術, .NET開発, .NET Core, ASP.NET, ASP.NET Web API

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally