JSON形式とは ?
PythonやJavaScriptではJSON形式でデータを保持しておくと、ウィジット含めた相互変換で便利です。
JSON形式はデータのファイル保存、データの受け渡しなどで使用されます。
ファイルとして保存する場合は、拡張子「json」を与えます。
Shade3Dでは、Pythonスクリプトやウィジットのデータ構造/データ受け渡しとしての使用に適しています。
JSON形式
テキストファイルで「変数名」と「値」を「変数名:値」で指定し、
コンマ区切りで羅列したデータ構造です。
{
"Name" : "Kanda", "Area" : "Tokyo", "User" : 21
}
文字コードはUTF-8で指定します。
文字列はダブルクォーテーションで区切って指定します(シングルクォーテーションは使用できません)。
上記の場合は以下の情報となります。
変数名 | 値 |
---|---|
Name | Kanda |
Area | Tokyo |
User | 21 |
配列を指定
配列は [ a, b, c, d ] のように指定します。
{
"Name" : "Kanda",
"Area" : "Tokyo",
"NumList" : [12, 3, 45, 16, 29]
}
PythonでJSON形式を扱う
Shade3Dのスクリプト言語で使用されているPythonでJSONを扱います。
辞書の内容をJSON文字列に変換
import json
dat = {"Name" : "Kanda", "Area" : "Tokyo", "User" : 21}
print json.dumps(dat)
この場合、datにキーと値の配列が格納されています(ディクショナリ/辞書、連想配列)。
JSONの処理を行うには「import json」の指定が必要です。
「json.dumps(dat)」でdatの内容をJSON文字列に変換します。
この場合、結果は「{“User”: 21, “Name”: “Kanda”, “Area”: “Tokyo”}」と表示されます。
JSON文字列を辞書に変換
import json
str = '{"Name" : "Kanda", "Area" : "Tokyo", "User" : 21}'
dat2 = json.loads(str)
print dat2["Name"]
print dat2["Area"]
「json.loads(JSON文字列)」を指定することで、JSON文字列を辞書に変換します。
この場合、”Name”の値である”Kanda”、”Area”の値である”Tokyo”が表示されます。
日本語文字列を扱う場合
Shade3Dで扱っているPythonスクリプトで、JSONの日本語文字列を扱う場合は注意が必要です。
辞書の値として日本語文字列を扱う場合、「json.loads(str)」で取得された辞書内の文字列はUnicodeエスケープされたものが入っています。
import json
str = '{"Name" : "神田", "Area" : "Tokyo", "User" : 21}'
dat2 = json.loads(str)
print dat2["Name"]
print dat2["Name"].encode('utf-8') # Uncode文字列をバイト文字列に変換.
上記コードをShade3Dのスクリプトウィンドウで実行すると、
一行目は「^0」と表示されます。
二行目は「神田」と正しく表示されます。
「json.dumps」を使用し、日本語を含むJSON文字列を出力する場合は以下のようにします。
dat = {"Name" : "神田", "Area" : "Tokyo", "User" : 21}
str = json.dumps(dat, ensure_ascii=False)
print str
「json.dumps」の第二引数で「ensure_ascii=False」を指定すると、変換処理が行われません。
この場合は「{“User”: 21, “Name”: “神田”, “Area”: “Tokyo”}」と表示されます。
ウィジットのJavaScriptでJSON形式を扱う
Shade3Dのウィジットを使用する場合、HTMLファイルでJavaScriptからJSON形式を変換できます。
以下はJavaScriptのコードになります。
連想配列の内容をJSON文字列に変換
var dArray = {"Name" : "神田", "Area" : "Tokyo", "User" : 21}
var str = JSON.stringify(dArray);
dArrayに格納された連想配列を「JSON.stringify」を使ってJSON文字列に変換します。
JSON文字列を連想配列に変換
var str = '{"Name" : "神田", "Area" : "Tokyo", "User" : 21}';
var retV = JSON.parse(str);
この場合、strに格納されたJSON文字列を「JSON.parse(str)」を使って連想配列に変換します。
「retV[“Name”]」の値は”神田”となります。