JSON文字列とオブジェクトの相互変換を行います。
- 構文
- object = JSON.Parse( text, reviver )
- string = JSON.Stringify( value, replacer, space )
- object = JSON.Parse( text, reviver )
- 引数
- text 必須
- JSONとして解析する文字列
- value 必須
- JSON文字列に変換する値
- reviver 省略可
- 使用不可
- replacer 省略可
- 使用不可
- space 省略可
- 出力するJSON文字列に空白を挿入するための文字列もしくは数値
- 戻り値
- Parse
- JSON文字列をオブジェクトに変換
- Stringify
- オブジェクトをJSON文字列に変換
プログラム
JSONとは
JSON(JavaScript Object Notation)は、データを構造化して表現するための軽量なフォーマットです。おもにWebアプリケーションでデータの送受信に利用されています。
JSONの特徴
JSONには以下のような特徴があります。
- 軽量で可読性が高い
- CSV形式は表形式のデータをカンマで区切って表現しますがネストされた構造は表現できません。XML形式はタグを使い階層化して複雑なデータも構造化して表現します。JSONはCSVとXMLの両方の特徴を持っていて人間が理解しやすい形式であり、デバッグやデータの確認が容易です。
- 言語非依存性
- JSONはプログラミング言語に依存せず、ほとんどの言語でかんたんに利用することができるライブラリが用意されています。
- ネスト構造
- オブジェクトや配列をネストして表現できるため、複雑なデータ構造を簡潔に記述できます。
JSONの記法
JSONは以下に示すルールに従って記述します。
- 全体を{ }で囲みます。
- データはキーと値のペアとなり、キー:値の形式で記述します。またこのキー名とその値の組み合わせのことをプロパティといいます。
- キー名は"(ダブルクォーテーション)で囲みます。'(シングルクォーテーション)はエラーとなります。
- 複数のデータがあるときは,(カンマ)で区切ります。
- オブジェクトは{ }、配列は[ ]で定義します。
JSONの構文
JSON文字列からオブジェクトの生成
JSONモジュールのParse関数を使いJSON文字列をオブジェクトに変換します。
JSON文字列にはUWSCの特殊文字であるダブルクォーテーションを含むため、複数行文字列の定義を使って代入します。TEXTBLOCKを使わずに書くと以下のようになります。
この場合は仮の文字としてシングルクォーテーションで囲み、REPLACE関数 (スクリプト関数)で置換する以下の書き方の方が見やすくなります。
プロパティへのアクセス
オブジェクトに変換することでプロパティにアクセスすることができるようになります。オブジェクト.キー名でそのプロパティの値にアクセスすることができます。
- 結果
配列の要素へアクセス
配列のプロパティにはオブジェクト.配列名.Item[添字]でアクセスすることができます。添字は0から始まる整数で、配列の要素数はオブジェクト.配列名.lengthで取得することができます。
- 結果
データ型
JSONで表現するデータ型は以下のものがあり、これらを組み合わせてデータを記述していきます。
- 文字列
- データを"(ダブルクォーテーション)で囲み文字列を指定します。Unicode文字列を文字コードの番号で指定する場合、"\uXXXX"(XXXXに文字コード)の形式で指定します。エスケープが必要な文字については特殊文字を参照。(例: "Hello, World!")
- 数値
- 数値は10進数の整数、小数、指数表記で指定することかてきます。ダブルクォーテーションで囲むと文字列型となるので注意。(例: 42、3.14)
- 真偽値
- trueまたはfalseを指定することができます。真偽値はすべて小文字で記述します。大文字を含めた場合エラーが発生します。(例: true、false)
- ヌル値
- 値がないことを示すヌル値(null)を指定することができます。項目(キー)が用意されているけど代入する値がないときに使います。真偽値のときと同様、すべて小文字で指定する必要があります。(例: null)
- オブジェクト(連想配列)
- { }で囲みます。キーと値のペアを持つプロパティを指定することができます。値にオブジェクトを指定することで入れ子構造にすることができます。(例: {"key": "value"})
- 配列
- 1つのキーに対して複数の値を指定することができます。値には文字列、数値、真偽値、ヌル値、オブジェクト、配列を指定することができます。オブジェクトはキーと値のペアであるのに対し、配列は値のみを列挙するときに使います。(例: ["apple", "banana", "cherry"])
特殊文字
特殊文字はJSONの構文中において、特別な意味を持ちます。
例えば"(ダブルクォーテーション)は文字列の開始・終了位置を表すため、文字列中にそのまま記述すると文字列の終わりと認識されてしまいます。また改行やタブはJSONテキストの整形に使われるため文字列として使いたい場合、これらはエスケープ処理をする必要があります。
エスケープが必要な文字は以下の表のとおりです。\(バックスラッシュ)直後のアルファベットは小文字で入力します。大文字の場合エラーが発生します。
| エスケープシーケンス | 意味 |
|---|---|
| \" | ダブルクォーテーション |
| \\ | バックスラッシュ |
| \/ | スラッシュ |
| \b | バックスペース |
| \f | 改ページ(フォームフィード) |
| \n | 行頭復帰(キャリッジリターン) |
| \r | 改行(ラインフィード) |
| \t | タブ |
| \uXXXX | Unicode文字列 |
Unicode文字列についてはhttps://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_0000-0FFFを参照。
例えば§を入力したい場合、表を見るとU+00A0行7列の位置にあるのでコードは\u00a7となります。
json2.js
UWSCの標準関数だけではJSONデータを解析するのは難しいため、外部のライブラリを使うことで簡単に解析できるようにします。json2.jsはJSONデータを扱うためのJavaScriptライブラリでJSON-js/json2.js at master · douglascrockford/JSON-js · GitHubからダウンロードすることができます。
UWSCで直接JavaScriptを扱うことはできないので、ScriptControlというJavaScriptのコードを解釈・実行するオブジェクトを使いjson2.jsの処理を実行します。
