JSON形式を使う(実践編)

より複雑なデータ

プロデルでJSON形式を扱う方法実践編。基本編はこちら

JSON形式は、入れ子を使うことができ、より複雑なデータも扱うことができる。例えば、こんな感じ。「item」の中にりんごに関するデータと机に関するデータが入っており、アイテムたる林檎や机には、それぞれナンバーが振られている(というか、振った)。

{"item":[
    {
        "ID":1,
        "ItemName":"りんご",
        "Type":"食べ物"
    },
    {
        "ID":2,
        "ItemName":"机",
        "Type":"家具"
    }
]}

さて、こういう形のデータをプログラム内で書き、それをJSON形式ではない、通常の辞書型にしたい場合、プロデルの場合は、少し注意がいる。このまま基礎編のやり方にこのデータをコピー&ペーストしても、エラーが出てしまう。

具体的には、一行目、{“item”:[、とある部分の最後の「[」を[]で囲む。公式マニュアルのサンプルでは、末尾の]についても[]]と囲う形で書かれているが、末尾の方は、囲み忘れても通る模様(ver.1.8.1150)。

さて、上記のデータを変数「アイテム」に読み込むには、下記のようになる。

アイテムは、JSON形式:「{"item":[[]
{
    "ID":1,
    "ItemName":"りんご",
    "Type":"食べ物"
},
{
    "ID":2,
    "ItemName":"机",
    "Type":"家具"
}
]}」を読み取る
アイテムを報告する

ややこしく見えるが、

JSON形式:「」を読み取る

という基本形から、変わっていない。後は、[を[]で囲むのを忘れなければOK。

・・・とここまで書いておいてなんだが、JSON形式のデータを一旦変数に入れておけば、実はすっきりと書ける(このページ最後の方に掲載)。

さて、こうして変数「アイテム」に投入されたデータは、次のようになる。

item={ID=1\nItemName=りんご\nType=食べ物,ID=2\nItemName=机\nType=家具}

辞書型になったデータを覗いてみる

さて、無事辞書型の変数「item」に入ったデータだが、良く分からないな、と感じるようであれば、アイテム(「item」)を報告させると、分かりやすくなる(多分)。itemがkey、残りがvalueに入っている。

更に、これを配列に放り込んでみる。変数「箱」を作り・・・

箱=アイテム(「item」)
箱(1)を報告する

とすると、結果は次のようになる。

ID=1
ItemName=りんご
Type=食べ物

箱(2)には、

ID=2
ItemName=机
Type=家具

(あくまで中身を把握しやすくするための作業なので、使えなくてもご容赦を)

JSON形式で保存する

辞書型の変数「アイテム」のデータをJSON形式にし、ファイルに保存する

セーブ用=アイテムをJSON形式として書き出す
セーブ用を「test.json」に「UTF-8」で保存する

上記では、変数に入れているが、入れずに下記のような書き方でも行ける。

アイテムをJSON形式として書き出したものを「test.json」に「UTF-8」で保存する

これで、「test.json」に文字コードUTF-8でデータが保存される。文字コードを指定せず、「test.json」に保存する、としても、プロデルのみで使っている分には、一応動く。ただ、JSONの文字コードは、「UTF-8」と定められているようなので、UTF-8で保存した方がいい。特に指定しない場合は、プロデルの場合、Shift-JISで保存される模様。

この書き方で保存した場合、データファイルは、人間には少々見づらいものになる。

{"item":[{"Type":"食べ物","ItemName":"りんご","ID":1},{"Type":"家具","ItemName":"机","ID":2}]}

タブ等を入れた、「より人間に見やすい」形にしたい場合は、「JSON形式として整形して書き出す」といったように、「整形して」を挿入すればいい。セーブファイル内は、下記のようになる。

{
    "item": [
        {
            "Type": "食べ物",
            "ItemName": "りんご",
            "ID": 1
        },{
            "Type": "家具",
            "ItemName": "机",
            "ID": 2
        }
    ]
}

JSON形式ファイルを読み込む

ファイルに保存してあるJSON形式データを読み込む方法。

テストは、「test.json」から読み込む
テストを報告する
テストの種類名を報告する

テスト2は、JSON形式:テストを読み取る
テスト2を報告する

変数テストに「test.json」を読み込む。テストは、この時、文字列。そのままずらずらと取り込まれているので、これを変数「テスト2」に辞書型として取り込む。

「読み取る」作業は同じなのに、酷くシンプルに見えるのは、JSON形式データが既に変数に格納されているから。

さて、後は、煮るなり焼くなりご随意に。

公式マニュアルリンク

JSON形式
辞書の式
辞書