Quantcast
Channel: 連想配列タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 129

JSONと辞書型(ディクショナリー)の違い

$
0
0
はじめに こんにちは、よわよわエンジニアです。 本稿では、超よわよわだった当時の自分に向けて、JSONと辞書型の違いを説明します。 あくまでも "違い" にフォーカスして解説しますので、JSONと辞書型それぞれの詳細な説明は他の記事をご参照ください。 ちなみに、Pythonでは「辞書型」と言いますが、他の言語では「オブジェクト型」や「連想配列」、「ハッシュテーブル」と言ったりしますね。 ここからは「辞書型」と呼称を統一し、Pythonのコードベースで説明していきます。 JSONと辞書型の違いが理解できなかった プログラミングを学びたてだった当時、私は「辞書型」→「JSON」の順でこれらを知ることになりますが、長らくその違いを理解することができませんでした。 Pythonを学び始めてまずは「辞書型」を知り、以下のようなコードで「ふんふん…こんな感じね」と理解します。 python d = {"name": "Taro", "age": 12, "country": "Japan"} print(d) # {'name': 'Taro', 'age': 12, 'country': 'Japan'} その後、Webの勉強をし始めた私は「JSON」と出会います。 Wikipediaで以下のように説明がある通り、私が当時読んだ記事にも「JSONはデータフォーマットの一種である」と記載されていました。 JavaScript Object Notation(JSON、ジェイソン)はデータ記述言語の1つである。軽量なテキストベースのデータ交換用フォーマットでありプログラミング言語を問わず利用できる そして、JSONで表記されたデータ構造の具体例として以下のような記載があったのですが... JSON { "name": "Taro", "age": 12, "country": "Japan" } 「辞書型をprintしたものと一緒じゃねーか! 何が違うんだあああ...」 JSONと辞書型は何が違うのか 結論 JSONは「データフォーマット」であり、辞書型は「Pythonにおけるデータ型の一種」です。 JSONというフォーマットに従って記述されたデータは、そのままでは構造化された情報へのアクセスが容易に行えません。 なぜなら、ただの文字列だからです。 d["key名"]のような形でデータにアクセスできるようにするには、それぞれのプログラミング言語に応じて適切なデータ型に変換してあげる必要があります。 それがPythonでは辞書型であり、JavaScirptではオブジェクト型に該当する訳です。 JSONは「データフォーマット」 JSONは「こういうルールで書きましょうね」というただのフォーマットです。 似たものにCSVがありますが、CSVでは以下のように「カンマ区切りで書きましょう」というルールに基づいてデータを表現しますよね。 csv name, age, country Taro, 12, Japan 一方でJSONでは、「{}(波括弧)で囲みましょう」であったり「文字列は必ず""(ダブルクオーテーション)で囲みましょう」といったルールが定められており、そのルールに基づいて以下のようにデータを表現します。 JSON { "name": "Taro", "age": 12, "country": "Japan" } つまり、あえて誤解を恐れずに言うと、JSONはただの「文字列」です。 以下の例では、json_text という変数に、JSON形式の文字列を代入しています。 python json_text = '{"name": "Taro", "age": 12, "country": "Japan"}' print(type(json_text)) # <class 'str'> せっかくの構造化されたデータなので、json_text["name"] のような形で値を取得したくなりますよね。 しかし、そんなことは出来ません。なぜならjson_textはstr型のただの文字列だからです。 python print(json_text["name"]) # 以下のエラーが出力され、値は取得できない # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # TypeError: string indices must be integers json_text["name"]といった形でデータを取り扱いたい場合、Pythonでは「辞書型」に変換することでこれを実現します。 辞書型は「データ型」 一方で辞書型はPythonで扱えるデータ型の一種です。 Pythonではint型、str型など様々なデータ型がありますが、その一つがdict型(辞書型)です。 辞書型はさまざまな便利機能をもっており、d["key名"]とすることで値を取得できたり、d.keys()とすることでkeyの一覧を取得できたりします。 Pythonでは、JSON形式で記述されたデータ(文字列)をこの辞書型に変換することで、辞書型のさまざまな便利機能を使ってデータをより柔軟に取り扱うことが出来るようになります。 変換に際しては、jsonというモジュールを使います。 python import json json_text = '{"name": "Taro", "age": 12, "country": "Japan"}' d = json.loads(json_text) print(type(d)) # <class 'dict'> print(d["name"]) # Taro str型である json_text を json.loads() という関数で変換することでdict型(辞書型)になり、d["name"]という形で値を取得できているのがわかります。 また当然ですが、辞書型からJSON形式の文字列に変換することも可能です。 その際は、json.dumps()に辞書型のデータを渡すことで実現できます。 まとめ 本稿のまとめです。 JSONと辞書型の違い JSONはデータフォーマット 辞書型はPythonにおけるデータの型 JSON形式のデータはただの文字列なので、それぞれのプログラミング言語で適切なデータ型に変換することで扱いが容易になる 参考文献 JavaScript Object Notation - Wikipedia

Viewing all articles
Browse latest Browse all 129

Trending Articles