JSONの概要

前書き

JSONJavaScript Object Notationの略—はデータを共有するためのフォーマットです。 その名前が示すように、JSONはJavaScriptプログラミング言語から派生していますが、Python、Ruby、PHP、Javaなどの多くの言語で使用できます。 JSONは通常、「Jason」という名前のように発音されます。

JSONは、スタンドアロンの場合、.json拡張子を使用します。 別のファイル形式(.htmlなど)で定義されている場合は、引用符の中にJSON文字列として表示することも、変数に割り当てられたオブジェクトにすることもできます。 この形式は、Webサーバーとクライアントまたはブラウザー間で簡単に送信できます。

非常に読みやすく軽量なJSONは、XMLに代わる優れた代替手段を提供し、必要な書式設定がはるかに少なくなります。 この情報ガイドでは、JSONファイルで使用できるデータ、およびこの形式の一般的な構造と構文について理解することができます。

構文と構造

JSONオブジェクトは、通常は中括弧で表示されるキーと値のデータ形式です。 JSONを使用している場合、.jsonファイルにJSONオブジェクトが表示される可能性がありますが、プログラムのコンテキスト内にJSONオブジェクトまたは文字列として存在することもできます。

JSONオブジェクトは次のようになります。

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

これは非常に短い例であり、JSONは数行の長さになる可能性がありますが、これは、フォーマットが通常、両端にこの{ }のように見える2つの中括弧(または中括弧)で設定されていることを示しています。キーと値のペアがその間のスペースに入力されます。 JSONで使用されるほとんどのデータは、JSONオブジェクトにカプセル化されます。

キーと値のペアには、"key" : "value"のようにコロンがあります。 各キーと値のペアはコンマで区切られているため、JSONの中央は次のようになります:"key" : "value", "key" : "value", "key": "value"。 上記の例では、最初のキーと値のペアは"first_name" : "Sammy"です。

JSONkeysはコロンの左側にあります。 "key"のように、二重引用符で囲む必要があり、任意の有効な文字列にすることができます。 各オブジェクト内で、キーは一意である必要があります。 これらのキー文字列canには、"first name"のように空白が含まれていますが、プログラミング時にアクセスしにくくなる可能性があるため、"first_name"のようにアンダースコアを使用することをお勧めします。

JSONvaluesは、コロンの右側にあります。 詳細レベルでは、これらは6つの単純なデータ型のいずれかである必要があります。

  • ひも

  • 数字

  • オブジェクト

  • 配列

  • ブール値(trueまたはfalse)

  • null

より広いレベルでは、値は、next sectionでカバーされるJSONオブジェクトまたは配列の複雑なデータ型で構成することもできます。

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

.jsonファイルでは、通常、形式が複数行に展開されていますが、JSONはすべて1行で書き込むこともできます。

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

これは、別の種類のファイル内で、またはJSON文字列に遭遇したときに、より一般的です。

JSON形式を複数行で記述すると、特に大きなデータセットを処理する場合は特に、読みやすくなります。 JSONは要素間の空白を無視するため、コロンとキーと値のペアのスペースを空けて、データをさらに人間が読みやすくすることができます。

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

見た目は似ていますが、JSONオブジェクトはJavaScript objectと同じ形式ではないため、JavaScriptオブジェクト内で関数を使用することはできますが、JSONの値として使用することはできないことに注意してください。 JSONの最も重要な属性は、すべての参加言語が使用できる形式でプログラミング言語間で容易に転送できることです。 JavaScriptオブジェクトは、JavaScriptプログラミング言語を介してのみ直接操作できます。

これまでJSON形式を最も簡単な用語で見てきましたが、JSONはネストされたオブジェクトと配列で構成される階層的で複雑なものになる可能性があります。 次のセクションで、より複雑なJSONについて説明します。

JSONでの複合型の使用

JSONは、ネストされた配列に加えて、ネストされたオブジェクトをJSON形式で保存できます。 これらのオブジェクトと配列はキーに割り当てられた値として渡され、通常はキーと値のペアで構成されます。

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

以下のusers.jsonファイルでは、4人のユーザー("sammy""jesse""drew""jamie")のそれぞれについて、ネストされたJSONオブジェクトが各ユーザーの値。各ユーザーに関連する"username""location"の独自のネストされたキーがあります。 最初のネストされたJSONオブジェクトは、以下で強調表示されています。

users.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
  }
}

上記の例では、中括弧を使用して、4人のユーザーごとにユーザー名と場所のデータが関連付けられたネストされたJSONオブジェクトを形成します。 他の値と同様に、オブジェクトを使用する場合、コンマを使用して要素を区切ります。

入れ子配列

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

1人のユーザーに関連付けられたさまざまなWebサイトやソーシャルメディアプロファイルがある場合など、簡単にグループ化できる大量のデータを扱う場合は、配列を使用できます。

最初のネストされた配列が強調表示されると、Sammyのユーザープロファイルは次のようになります。

user_profile.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/DigitalOceanCloudHosting"
    },
    {
      "description" : "github",
      "link" : "https://github.com/digitalocean"
    }
  ]
}

"websites"キーと"social_media"キーはそれぞれ配列を使用して、サミーの2つのWebサイトリンクと3つのソーシャルメディアプロファイルリンクに属する情報をネストします。 角括弧を使用しているため、これらは配列であることがわかります。

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

XMLとの比較

XML、またはeXtensibleMarkupLanguageは、人間とマシンの両方が読み取ることができるアクセス可能なデータを格納する方法です。 XML形式は、多くのプログラミング言語で使用できます。

XMLは多くの点でJSONに非常に似ていますが、より多くのテキストが必要になるため、長さが長くなり、読み取りと書き込みに時間がかかります。 XMLはXMLパーサーで解析する必要がありますが、JSONは標準関数で解析できます。 また、JSONとは異なり、XMLは配列を使用できません。

XML形式の例を見てから、JSONでレンダリングされた同じデータを見てみましょう。

users.xml


    
        SammyShark Indian Ocean
    
    
        JesseOctopus Pacific Ocean
    
    
        DrewSquir Atlantic Ocean
    
    
        JamieMantisShrimp Pacific Ocean
    

users.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よりもスリムで冗長ではなく、AJAXアプリケーションを含む多くの状況ですぐに使用できますが、使用するデータ構造を決定する前に、作業しているプロジェクトのタイプを理解する必要があります。

リソース

JSONはJavaScriptで使用する自然な形式であり、多くの一般的なプログラミング言語で使用できる多くの実装があります。 「http://www.json.org/[IntroducingJSON]」サイトで完全な言語サポートを確認できます。また、jQuery libraryは互換性と解析も処理できます。

ほとんどの場合、純粋なJSONを記述するのではなく、データソースからプルするか、他のデータファイルをJSONに変換します。 オープンソースツールMr. Data Converterを使用して、スプレッドシートプログラムにあるCSVまたはタブ区切りのデータをJSONに変換できます。 クリエイティブ・コモンズライセンスのutilities-online.info siteを使用して、XMLをJSONに、またはその逆に変換できます。 自動化ツールを使用する場合、結果を確認し、必要に応じて冗長性を削除する必要があります。

他のデータ型をJSONに変換する場合、または独自のデータ型を作成する場合は、JSONLintを使用してJSONを検証し、JSFiddleを使用してWeb開発コンテキストでJSONをテストできます。

結論

JSONは、データを簡単に共有、保存、操作できる軽量な形式です。 フォーマットとして、JSONはTwitter APIを含むAPIでのサポートが増加しています。

独自の.jsonファイルを作成するのではなく、他のソースからそれらを調達する可能性が高いため、JSONの構造について考えるのではなく、プログラムでJSONを最適に使用する方法について考えることが重要です。