JSONについての紹介

はじめに

JSON(ジェイソン)は、データを共有するためのフォーマットで、JavaScriptオブジェクト記法(JavaScript Object Notation)の略称です。その名前が示す通り、JSONはJavaScriptプログラミング言語に由来していますが、PythonやRuby、PHP、Javaなど、多くの言語で使用することができます。JSONは通常、「ジェイソン」という名前で発音されます。

JSONは読みやすく、軽量であり、XMLの良い代替手段を提供し、多くのフォーマット処理が不要です。この情報ガイドでは、JSONファイルで使用できるデータやこのフォーマットの一般的な構造と構文について説明します。

文法と構造の理解

JSONは、単独で使用される場合は.json拡張子を使用し、他のファイル形式(例:.html)で定義される場合は、JSON文字列として引用符の内部に表示するか、変数に割り当てられたオブジェクトとして現れることができます。この形式は、ウェブサーバーとクライアントまたはブラウザの間で送信されます。

JSONオブジェクトは、通常波括弧で表されるキーと値のデータ形式です。JSONを扱う際には、.jsonファイル内にJSONオブジェクトが存在することが一般的ですが、プログラムのコンテキスト内でJSONオブジェクトや文字列としても存在することがあります。

以下はJSONオブジェクトの例です。

{
  "first_name" : "Sammy",
  "last_name" : "Shark",
  "location" : "Ocean",
  "online" : true,
  "followers" : 987 
}

この例は短いものですが、JSONは何行もある場合もありますが、一般的には2つの波括弧(または中カッコ)で構成され、それぞれ{ }で表され、その間にキーと値のペアが入っています。JSON内で使用されるデータのほとんどは、JSONオブジェクトにカプセル化されます。

キーと値のペアは、”キー” : “値” のようにコロンで区切られます。各キーと値のペアは、コンマで区切られます。したがって、JSONの中央部分は次のように記述されます:”キー” : “値”, “キー” : “値”, “キー” : “値”。前の例では、最初のキーと値のペアは “first_name” : “Sammy” です。

以下の日本語訳を提供します:

JSONキーはコロンの左側にあります。キーは二重引用符で括られる必要があり、”key”のように有効な文字列であれば何でも構いません。オブジェクト内では、キーは一意である必要があります。キーの文字列には空白が含まれる場合があり、”first name”のようになりますが、プログラミング時にアクセスが難しくなる可能性があるため、”first_name”のようにアンダースコアを使用するのが最適です。

JSONの値は、コロンの右側に存在します。詳細レベルでは、これらは以下の6つのデータ型のいずれかである必要があります。

  • strings
  • numbers
  • objects
  • arrays
  • Booleans (true or false)
  • null

広い視点で考えれば、値はJSONオブジェクトや配列といった複雑なデータ型から構成されることもあります。これについては次のセクションで詳しく説明します。

JSONに値として渡されるデータ型は、それぞれ独自の構文を保持しています。文字列は引用符で囲まれますが、数値は引用符で囲まれません。

.json ファイルでは、通常、複数の行で展開されたフォーマットが提供されますが、JSON は次の例のように、すべての行に書くこともできます。

{ "first_name" : "Sammy", "last_name": "Shark",  "online" : true, }

もうひとつのファイルタイプでより一般的ですし、またはJSON文字列に遭遇した場合により頻繁に発生します。

JSON形式を複数行で書くことは、特に大きなデータセットを扱う場合には、読みやすさを大幅に向上させることができます。JSONは要素間の空白を無視するため、コロンやキーと値のペアを適切に間隔をあけることで、データをより人間に読みやすくすることができます。

{ 
  "first_name"  :  "Sammy", 
  "last_name"   :  "Shark", 
  "online"      :  true 
}

JSONオブジェクトとJavaScriptオブジェクトは見た目が似ているものの、同じ形式ではないことを意識することが重要です。つまり、JavaScriptオブジェクト内で関数を使用することはできますが、JSONでは値として使用することはできません。JSONの最も重要な特徴は、プログラミング言語間で簡単に転送できることで、参加しているすべての言語で利用できる形式です。一方、JavaScriptオブジェクトはJavaScriptプログラミング言語を通じてのみ直接操作可能です。

JSONは、ネストされたオブジェクトと配列から成る階層を持ち、ますます複雑になることがあります。次に、これらの複雑な構造について詳しく学びます。

JSONの複雑なタイプとの作業

JSONフォーマットでは、ネストされたオブジェクトや配列をJSON形式で格納することができます。これらのオブジェクトや配列は、キーに割り当てられた値として渡され、キーと値で構成される場合もあります。

ネストされたオブジェクト

以下のusers.jsonファイルでは、4人のユーザー(”sammy”、”jesse”、”drew”、”jamie”)それぞれに対して、その値としてネストされたJSONオブジェクトが渡されており、それぞれのユーザーに関連する”username”と”location”というネストされたキーがあります。以下のコードブロックの各ユーザーエントリーは、ネストされたJSONオブジェクトの例です。

ユーザー.json
{ 
  "sammy" : {
    "username"  : "SammyShark",
    "location"  : "Indian Ocean",
    "online"    : true,
    "followers" : 987
  },
  "jesse" : {
    "username"  : "JesseOctopus",
    "location"  : "Pacific Ocean",
    "online"    : false,
    "followers" : 432
  },
  "drew" : {
    "username"  : "DrewSquid",
    "location"  : "Atlantic Ocean",
    "online"    : false,
    "followers" : 321
  },
  "jamie" : {
    "username"  : "JamieMantisShrimp",
    "location"  : "Pacific Ocean",
    "online"    : true,
    "followers" : 654
  }
}

この例では、カーリーブレースが使用され、各ユーザーの関連するユーザー名と場所のデータを持つネストされたJSONオブジェクトが形成されます。他の値と同様に、オブジェクトを使用する際には、要素を区切るためにコンマが使用されます。

ネストされた配列

データは、値として渡されるJavaScriptの配列を使用してJSON形式の中にも入れ子にすることができます。JavaScriptでは、配列のタイプの前後に角括弧[ ]を使用します。配列は順序付けられたコレクションであり、異なるデータ型の値を含むことができます。

例えば、一つのユーザーに関連づけられた複数のウェブサイトやソーシャルメディアのプロフィールなど、まとめてグループ化できる多くのデータを扱う場合には、配列を使用することができます。

最初のネストされた配列では、「Sammy」というユーザーのプロフィールを次のように表すことができます。

ユーザープロフィールの.jsonファイル
{ 
  "first_name" : "Sammy",
  "last_name" : "Shark",
  "location" : "Ocean",
  "websites" : [
    {
      "description" : "work",
      "URL" : "https://www.digitalocean.com/"
    },
    {
      "desciption" : "tutorials",
      "URL" : "https://www.digitalocean.com/community/tutorials"
    }
  ],
  "social_media" : [
    {
      "description" : "twitter",
      "link" : "https://twitter.com/digitalocean"
    },
    {
      "description" : "facebook",
      "link" : "https://www.facebook.com/Silicon CloudCloudHosting"
    },
    {
      "description" : "github",
      "link" : "https://github.com/digitalocean"
    }
  ]
}

「websites」というキーと「social_media」というキーは、それぞれSammyの2つのウェブサイトリンクと3つのソーシャルメディアプロフィールリンクに関連する情報をネストするために、配列を使用しています。角括弧の使用によってそれが配列であることを判断することができます。

JSON形式内でのネストを利用することにより、より複雑かつ階層的なデータを扱うことができます。

JSONとXMLを比較すると

XML、またはeXtensible Markup Languageは、人間と機械の両方によって読むことができるアクセス可能なデータを保存する方法です。XML形式は、多くのプログラミング言語で使用できます。

多くの面で、XMLはJSONに似ていますが、読み書きにはより多くのテキストが必要であり、それによって長くかつ時間のかかる操作になります。XMLはまたXMLパーサーで解析する必要がありますが、JSONは標準の関数で解析できます。また、JSONとは異なり、XMLは配列を使用することができません。

以下はXML形式の例です:

ユーザーズ.xml
<users>
    <user>
        <username>SammyShark</username> <location>Indian Ocean</location>
    </user>
    <user>
        <username>JesseOctopus</username> <location>Pacific Ocean</location>
    </user>
    <user>
        <username>DrewSquir</username> <location>Atlantic Ocean</location>
    </user>
    <user>
        <username>JamieMantisShrimp</username> <location>Pacific Ocean</location>
    </user>
</users>

今、JSONでレンダリングされた同じデータを比較してください。

ユーザー.json
{"users": [
  {"username" : "SammyShark", "location" : "Indian Ocean"},
  {"username" : "JesseOctopus", "location" : "Pacific Ocean"},
  {"username" : "DrewSquid", "location" : "Atlantic Ocean"},
  {"username" : "JamieMantisShrimp", "location" : "Pacific Ocean"}
] }

JSONはXMLよりもコンパクトで、終了タグを必要としません。さらに、このJSONの例で使用されているように、XMLは配列を使用していません(角括弧の使用によってわかります)。

もしHTMLを知っているのであれば、XMLはタグの使用方法においてかなり似ていると気づくでしょう。JSONはXMLよりもスリムで冗長さがなく、多くの状況で素早く使用できるものですが、どのようなデータ構造を使用するかを決定する前に、まず作業しているプロジェクトのタイプを把握する必要があります。

結論

JSONはデータを共有、保存、操作するための軽量なフォーマットです。JSONはAPI(特にTwitter API)において、サポートが増えてきています。また、JSONはJavaScriptで使われる自然なフォーマットであり、さまざまな人気のあるプログラミング言語で使用できる実装もたくさんあります。詳しい言語のサポートについては、「JSONの紹介」サイトをご覧ください。

おそらく自分自身で.jsonファイルを作るよりも、他のソースから入手することが多いため、JSONの構造について考えるよりも、プログラムでJSONを最も効果的に使用する方法について考えることが重要です。たとえば、表計算プログラムで見つけたCSVやタブ区切りのデータを、オープンソースのツールであるMr. Data Converterを使用してJSON形式に変換することができます。また、CCライセンスのutilities-online.infoサイトを使用して、XMLをJSONに変換したり、その逆も行うことができます。

最後に、他のデータ型をJSONに変換するか、独自のものを作成する際には、JSONLintでJSONの検証を行い、JSFiddleでウェブ開発のコンテキストでJSONをテストすることができます。

コメントを残す 0

Your email address will not be published. Required fields are marked *