JSONとは何ですか?なぜそれを使用するのですか?


542

私はウィキペディアとGoogleで調べて公式ドキュメントを読みましたが、JSONとは何か、なぜそれを使用するのかを本当に理解するまでには至っていません。

私はしばらくの間、PHP、MySQL、Javascript / HTMLを使用してアプリケーションを構築してきましたが、JSONが私の生活をより簡単にしたり、コードを改善したり、ユーザーインターフェイスを改善したりできるとしたら、それについて知りたいと思います。誰かが私に簡潔な説明をしてもらえますか?




1
I-JSONについてもお読みください:tbray.org/ongoing/When/201x/2015/03/23/i-json
Christophe Roussy

1
+ Brad Gilbert実はそうではありません-データを表現するための独自の方法であり、オブジェクトを文字列として表現するという理由だけでJSONに似ています(XMLやplistsやその他多くのオブジェクトと同様)が、機械記述にはJSONが、人間による記述にはYAMLが適しています。
Ben Aubin 2016

回答:


649

JSON(JavaScript Object Notation)は、データ交換に使用される軽量フォーマットです。 これは、JavaScript言語のサブセット(オブジェクトがJavaScriptで構築される方法)に基づいています。MDNに記載された、いくつかのJavaScriptはJSONではなく、いくつかのJSONはJavaScriptのではありません。

これが使用される場所の例は、Webサービス応答です。「昔」の時代、Webサービスはデータを送信するための主要なデータ形式としてXMLを使用していましたが、JSONが登場して以来(JSON形式はRFC 4627でDouglas Crockfordによって指定されています)、はるかに多いため、これが推奨される形式でした軽量

詳細については、公式のJSON Webサイトをご覧ください。

JSONは2つの構造に基づいて構築されています。

  • 名前と値のペアのコレクション。さまざまな言語で、これはオブジェクト、レコード、構造体、辞書、ハッシュテーブル、キー付きリスト、または連想配列として実現されます。
  • 値の順序付きリスト。ほとんどの言語では、これは配列、ベクトル、リスト、またはシーケンスとして実現されます。

JSONの構造



JSONオブジェクト図

JSON配列図

JSON値の図

JSON文字列図

JSON番号図

JSONデータの例を次に示します。

{
     "firstName": "John",
     "lastName": "Smith",
     "address": {
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "postalCode": 10021
     },
     "phoneNumbers": [
         "212 555-1234",
         "646 555-4567"
     ]
 }

JavaScriptのJSON

JSON(JavaScript)は文字列です!

多くの場合、JavascriptオブジェクトはすべてJSONであり、JSONはJavaScriptオブジェクトであると想定されています。これは誤りです。

JavaScript var x = {x:y}JSONではなく、これはJavaScriptオブジェクトです。2つは同じものではありません。対応するJSON(Javascript言語で表される)はになりますvar x = '{"x":"y"}'。それ自体のオブジェクトではなく、文字列x型のオブジェクトです。あなたが最初にそれを解析する必要があり本格的なJavaScriptオブジェクトにこれを有効にするには、、今のオブジェクトであるが、これはもうJSONではありません。var x = JSON.parse('{"x":"y"}');x

JavaScriptオブジェクトとJSONを参照してください


JSONとJavaScriptを使用する場合、eval関数を使用してコールバックで返された結果を評価したくなるかもしれませんが、JSONには有効だがJavaScriptには無効な2つの文字(U + 2028とU + 2029)があるため、これは推奨されません。 (この詳細については、こちらをご覧ください)。

したがって、JSONを評価する前に、有効なJSONをチェックするCrockfordのスクリプトを常に使用する必要があります。スクリプトの説明へのリンクはここにあり、ここにjsファイルへの直接リンクがあります。最近の主要なブラウザはすべて、このための独自の実装を備えています。

JSONパーサーの使用例(上記のコードスニペットのjsonを使用):

//The callback function that will be executed once data is received from the server
var callback = function (result) {
    var johnny = JSON.parse(result);
    //Now, the variable 'johnny' is an object that contains all of the properties 
    //from the above code snippet (the json example)
    alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};

JSONパーサーは、もう1つの非常に便利なメソッドを提供しますstringify。このメソッドは、JavaScriptオブジェクトをパラメーターとして受け入れ、JSON形式の文字列を出力します。これは、サーバーにデータ送り返す場合に便利です

var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}

上記の2つのメソッド(parseおよびstringify)も2番目のパラメーターを受け取ります。これは、最終結果のすべてのレベルですべてのキーと値に対して呼び出される関数であり、各値は入力された関数の結果に置き換えられます。(これの詳細はこちら

ところで、JSONはJavaScriptのためだけだと思っている皆さんは、この記事をチェックしてそうでないことを説明し、確認してください。


参考文献


1
情報がシリアル化される方法に関係なく、パーサーを使用することになりますよね?したがって、その実装の詳細が抽象化される場合、データを送信するためにどのフォーマットを使用するかを誰が気にするでしょう。
トムリーマン

6
実際、クライアントとサーバーの間でデータを送受信する場合、応答サイズに注意することはかなり重要だと思います。
Andreas Grech

9
知識をひけらかすために、JSONは、厳密なサブセットであることから、それを防ぐことは、JavaScriptとは異なる処理する文字のカップルがあります:timelessrepo.com/json-isnt-a-javascript-subset
ジェレミー・銀行

XMLよりも軽量であると言うとき、ファイルサイズを指しているのですか、それとも軽量化はコーディングにおいて空間的な意味がありますか?
whatahitson 2013

1
XMLをJSONに置き換えますか?それはあなたの言うことですか?もしそうなら...素晴らしい、xmlは悪夢です。
James111 2015年

66

コンセプトの説明-コードや専門用語なし

JSONとは何ですか?–どのように妻に説明したかTM

私:「これは基本的に、誰かと書面でやり取りする方法ですが、非常に具体的なルールがあります。

妻:ええ……?

私:平凡な英語では、ルールはかなり緩いです。ちょうどケージファイトと同じです。JSONではそうではありません。何かを説明するには多くの方法があります。

•例1:私たちの家族には4人がいます:あなた、私、2人の子供。

•例2:私たちの家族:あなた、私、kid1、kid2。

•例3:家族:[あなた、私、kid1、kid2]

•例4:家族には、mum、dad、kid1、kid2の4人がいます。

妻:なぜ彼らは代わりに普通の英語を使わないのですか?

私:彼らはそうしますが、私たちがコンピュータを扱っていることを思い出してください。コンピュータは愚かで、文章を理解することができないでしょう。ですから、コンピュータが関係しているときは本当に具体的である必要があります。そうでなければ、コンピュータは混乱します。さらに、JSONはかなり効率的な通信方法であるため、無関係なもののほとんどが切り取られます。私たちの家族をコンピューターに伝えたい場合は、次のようにしてください。

{
                "Family" :  ["Me", "Wife", "Kid1", "Kid2"] 
}

……そしてそれは基本的にJSONです。ただし、JSONの文法規則に従う必要があります。これらの規則に違反すると、コンピューターは単にあなたが書いているものを理解(つまり解析)できなくなります。

妻:では、どうやってJsonで書くのですか?

良い方法は、jsonシリアライザを使用することです。これは、重い作業を行うライブラリです。

概要

JSONは基本的に、非常に具体的なルールを使用して、データを誰かと通信する方法です。キーと値のペアと配列の使用。これは説明された概念です。現時点では、上記の特定のルールを読む価値があります。


48

つまり、JSONはJavaScriptコードになるようにシリアル化する方法です。このコードは(evalなどで)実行されると、シリアライズしたデータを含むJavaScriptオブジェクトを作成して返します。JavaScriptでは次の構文が許可されているため、これを使用できます。

var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements
var MyObject = {
    'StringProperty' : 'Value',
    'IntProperty' : 12,
    'ArrayProperty' : [ 1, 2, 3],
    'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' }
}; // MyObject is now an object with property values set.

これはいくつかの目的に使用できます。1つは、サーバーバックエンドからJavaScriptコードにデータを渡すのに便利な方法です。したがって、これはAJAXでよく使用されます。

これをスタンドアロンのシリアル化メカニズムとして使用することもできます。これは、XMLよりも簡単で場所をとらないものです。さまざまなプログラミング言語のJSONでオブジェクトをシリアル化および逆シリアル化できる多くのライブラリが存在します。


31

つまり、データを渡すためのスクリプト表記です。いくつかの方法で、XMLの代わりに、基本的なデータ型、配列、および連想配列(名前と値のペア。オブジェクトと呼ばれるため、オブジェクトと呼ばれます)をネイティブでサポートします。

構文はJavaScriptで使用されるもので、JSON自体は「JavaScript Object Notation」を表します。ただし、移植性があり、他の言語でも使用されています。

詳細への便利なリンクはここにあります:

http://secretgeek.net/json_3mins.asp


19

JSON形式は、ネットワーク接続を介して構造化データをシリアル化して送信するためによく使用されます。これは主に、サーバーとWebアプリケーションの間でデータを転送するために使用され、XMLの代替として機能します。


16

JSONはJavaScript Object Notationです。これは、XMLと比較して、ネットワーク接続を介してデータセットを転送する方法がはるかにコンパクトです。JSONは、XMLが「推奨」オプションであるAJAXのようなアプリケーションで使用することをお勧めします。XMLの冗長性により、ダウンロード時間が長くなり、帯域幅の消費が増加します($$$)。JSONを使用しても同じ効果を実現できます。JSONのマークアップは、ほとんどがデータ自体にのみ使用され、基になる構造には使用されません。


11

一般的な短い答えは、AJAXを使用してデータ要求を行う場合、オブジェクトをJSON文字列として簡単に送信および返すことができます。JavaScriptサポートの利用可能な拡張機能は、AJAXリクエストでサーバーにデータを送信するためのすべてのJavaScriptタイプでのtoJSON()呼び出しです。AJAX応答はオブジェクトをJSON文字列として返すことができ、単純なeval呼び出しでJavaScriptオブジェクトに変換できます。たとえば、AJAX関数someAjaxFunctionCallReturningJsonが返された場合

"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"

あなたはJavaScriptで書くことができます

var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);

JSONはWebサービスのペイロードなどにも使用できますが、AJAXの結果には非常に便利です。

  • 更新(10年後):これを行わないでください。JSON.parseを使用してください。

1
eval()を使用すると、何でも評価されます。これはセキュリティ上のリスクです。
トーマスウェラー

@ThomasWellerええ、この答えは古くからあります。JSON.parseを使います。
スティーブンA.ロウ

8

主にJSONが好きなのは、とても簡潔だからです。gzip圧縮できるWebコンテンツの場合、これは必ずしも大したことではありません(したがって、x htmlが非常に人気がある理由)。しかし、これが有益な場合もあります。

たとえば、あるプロジェクトでは、シリアル化してXMPP経由で送信する必要がある情報を送信していました。ほとんどのサーバーでは1つのメッセージで送信できるデータの量が制限されるため、明らかな代替手段であるXMLよりもJSONを使用すると便利です。

さらにおまけとして、PythonまたはJavaScriptに慣れている場合は、JSONをすでによく知っているので、それほどトレーニングをしなくてもJSONを解釈できます。


8

JSONとは何ですか?

JavaScript Object Notation(JSON)は、JavaScriptのオブジェクトリテラルに着想を得た軽量のデータ交換フォーマットです。

JSON値は次のもので構成できます。

オブジェクト(名前と値のペアのコレクション)配列(値の順序付きリスト)文字列(二重引用符で囲まれた)数値true、false、またはnull

JSONは言語に依存しません。

PHPでのJSON?

PHPバージョン5.2.0以降、JSON拡張機能はデフォルトで機能をデコードおよびエンコードします。

Json_encode-値のJSON表現を返しますJson_decode-JSON文字列をデコードしますJson_last_error-発生した最後のエラーを返します。

JSON構文とルール?

JSON構文は、JavaScriptオブジェクト表記構文から派生します。

データは名前と値のペアですデータはカンマで区切られます中括弧はオブジェクトを保持します角括弧は配列を保持します


4

私たちは大学でプロジェクトを行う必要があり、非常に大きな問題に直面しました。それは、同一起源ポリシーと呼ばれています。その他の点については、JavaScriptのXMLHttpRequestメソッドが、サイトが存在するドメイン以外のドメインにリクエストを送信できないようにしています。

たとえば、サイトがwww.example.comにある場合、www.otherexample.comにリクエストを送信することはできません。JSONRequestはそれを許可しますが、そのサイトがそれを許可する場合は結果をJSON形式で取得します(たとえば、メッセージをJSONで返すWebサービスがある場合)。それはおそらくJSONを使用できる1つの問題です。

これは実用的なものです:Yahoo JSON


4

JSONと従来の構文の違いは次のとおりです(JavaScript)

従来の

 function Employee(name, Id, Phone, email){

      this.name = name;
      this.Id = Id;
      this.Phone = Phone;
      this.email = email;
  }

  //access or call it as 

var Emp = new Employee("mike","123","9373849784","mike.Anderson@office.com");

JSONを使用

JSONを使用する場合、別の方法で定義できます。

  function Employee(args){

   this.name = args.name;
   this.Id = args.Id;
   this.Phone = args.Phone;
   this.email = args.email;
}

//now access this as...

var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});

覚えておくべき重要なことは、JSONメソッドを使用せずに100要素の「従業員」クラスまたはモーダルを構築する必要がある場合、クラスを作成するときにすべてを解析する必要があるということです。ただし、JSONでは、クラスの新しいオブジェクトが定義されている場合にのみ、オブジェクトをインラインで定義できます。

以下のこの行は、JSONで物事を行う方法です(物事を定義するための単純な方法です)

 var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});

2
それは厳密にはJSONではありません-それはJavaScriptオブジェクトです(JSONではありません)
Ben Aubin

4

時には何も必要とされないところに専門性が与えられ、トップ投票の回答の多くは正確に専門的かつ具体的ですが、個人的には、Wikipediaや公式ドキュメント。

私がJSONについて考えるのが好きなのは、まさにそれが何であるか-異なる言語の世界の中の言語です。ただし、JSONと他の言語の違いは、「全員」が「母国語」とともにJSONを「話す」ことです。

実世界の例を使用して、3人の人間がいるとしましょう。一人はイボ語を母国語として話します。2人目は1人目とのやり取りを望んでいますが、1人目はヨルバ語を第一言語として話します。

私たちは何ができる?

ありがたいことに、この例の3人目は英語を話しながら育ちましたが、たまたま第二言語としてイボ語とヨルバ語の両方を話すため、最初の2人の仲介者としての役割を果たすことができます。

プログラミングの世界では、最初の「人」はPython、2番目の「人」はRuby、3番目の「人」はJSONであり、たまたまRubyをPythonに「変換」したり、その逆を行ったりすることができます。明らかに、このアナロジーは完璧なものではありませんが、バイリンガルの誰かとして、JSONが他のプログラミング言語とどのように相互作用するかを調べる簡単な方法だと思います。


2

とても簡単です。JSONはJava Script Object Notationの略です。ソフトウェアコンポーネント間でデータを転送するためにXMLを使用する代わりと考えてください。

たとえば、私は最近、JSONを返す一連のWebサービスを作成し、一部のJavaScript開発者は、サービスを呼び出してその形式で返された情報を消費するコードを作成しました。


2

JSON(JavaScriptオブジェクト表記)は、データ交換/転送用の軽量のデータ形式です。JavaScriptと同様に、キーと値のペアです。REST APIの場合、サーバーからクライアントへのデータ転送に広く使用されています。現在、多くのソーシャルメディアサイトがこれを使用しています。データ型に関しては、XMLほど堅牢ではありません。XMLには非常に豊富なデータ型とXSDがあります。JSONはこれに少し欠けています。

同じ量の文字列データの場合、XMLにはすべての開始タグと終了タグなどがあるため、JSONはXMLに比べて軽量になります。


0

Javaのコンテキストでは、JSONを使用したい理由の1つは、JSONがJavaのシリアライゼーションフレームワークの非常に優れた代替手段を提供することです。

Joshua Blochはこれについて、項目85「Javaシリアライゼーションの代替案を好む」(Effective Java 3rd Edition)で詳しく説明しています。

Javaのシリアライゼーションは当初、データ構造を簡単に送信または保存できる形式に変換することを目的としていました。JSONはこの要件を満たしていますが、上記の深刻なエクスプロイトはありません。


-3

次のコードを試して、php json応答を解析します。read.php

<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<script type="text/javascript">  
$.ajax({
    url:'index.php',
    data:{},
    type:"POST",
    success:function(result) {
        jsondecoded = $.parseJSON(result);
        $.each(jsondecoded, function(index, value) {
            $("#servers").text($("#servers").text() + " " + value.servername);
            console.log(value.start);
            console.log(value.end);
            console.log(value.id);
        });
    },
    statusCode: {
    404: function() {
      alert( "page not found" );
    }
  }
});
</script>

server.php

<?php 
echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]';
?>

このコードは質問に答えることがありますが、問題を解決する方法や理由に関する追加のコンテキストを提供すると、回答の長期的な価値が向上します。
Nic3500 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.