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”]」の値は”神田”となります。

Translate »