私はウィキペディアとGoogleで調べて公式ドキュメントを読みましたが、JSONとは何か、なぜそれを使用するのかを本当に理解するまでには至っていません。
私はしばらくの間、PHP、MySQL、Javascript / HTMLを使用してアプリケーションを構築してきましたが、JSONが私の生活をより簡単にしたり、コードを改善したり、ユーザーインターフェイスを改善したりできるとしたら、それについて知りたいと思います。誰かが私に簡潔な説明をしてもらえますか?
私はウィキペディアとGoogleで調べて公式ドキュメントを読みましたが、JSONとは何か、なぜそれを使用するのかを本当に理解するまでには至っていません。
私はしばらくの間、PHP、MySQL、Javascript / HTMLを使用してアプリケーションを構築してきましたが、JSONが私の生活をより簡単にしたり、コードを改善したり、ユーザーインターフェイスを改善したりできるとしたら、それについて知りたいと思います。誰かが私に簡潔な説明をしてもらえますか?
回答:
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データの例を次に示します。
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
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のためだけだと思っている皆さんは、この記事をチェックして、そうでないことを説明し、確認してください。
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は基本的に、非常に具体的なルールを使用して、データを誰かと通信する方法です。キーと値のペアと配列の使用。これは説明された概念です。現時点では、上記の特定のルールを読む価値があります。
つまり、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でオブジェクトをシリアル化および逆シリアル化できる多くのライブラリが存在します。
つまり、データを渡すためのスクリプト表記です。いくつかの方法で、XMLの代わりに、基本的なデータ型、配列、および連想配列(名前と値のペア。オブジェクトと呼ばれるため、オブジェクトと呼ばれます)をネイティブでサポートします。
構文はJavaScriptで使用されるもので、JSON自体は「JavaScript Object Notation」を表します。ただし、移植性があり、他の言語でも使用されています。
詳細への便利なリンクはここにあります:
一般的な短い答えは、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の結果には非常に便利です。
主にJSONが好きなのは、とても簡潔だからです。gzip圧縮できるWebコンテンツの場合、これは必ずしも大したことではありません(したがって、x htmlが非常に人気がある理由)。しかし、これが有益な場合もあります。
たとえば、あるプロジェクトでは、シリアル化してXMPP経由で送信する必要がある情報を送信していました。ほとんどのサーバーでは1つのメッセージで送信できるデータの量が制限されるため、明らかな代替手段であるXMLよりもJSONを使用すると便利です。
さらにおまけとして、PythonまたはJavaScriptに慣れている場合は、JSONをすでによく知っているので、それほどトレーニングをしなくてもJSONを解釈できます。
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オブジェクト表記構文から派生します。
データは名前と値のペアですデータはカンマで区切られます中括弧はオブジェクトを保持します角括弧は配列を保持します
私たちは大学でプロジェクトを行う必要があり、非常に大きな問題に直面しました。それは、同一起源ポリシーと呼ばれています。その他の点については、JavaScriptのXMLHttpRequestメソッドが、サイトが存在するドメイン以外のドメインにリクエストを送信できないようにしています。
たとえば、サイトがwww.example.comにある場合、www.otherexample.comにリクエストを送信することはできません。JSONRequestはそれを許可しますが、そのサイトがそれを許可する場合は結果をJSON形式で取得します(たとえば、メッセージをJSONで返すWebサービスがある場合)。それはおそらくJSONを使用できる1つの問題です。
これは実用的なものです:Yahoo JSON
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'});
時には何も必要とされないところに専門性が与えられ、トップ投票の回答の多くは正確に専門的かつ具体的ですが、個人的には、Wikipediaや公式ドキュメント。
私がJSONについて考えるのが好きなのは、まさにそれが何であるか-異なる言語の世界の中の言語です。ただし、JSONと他の言語の違いは、「全員」が「母国語」とともにJSONを「話す」ことです。
実世界の例を使用して、3人の人間がいるとしましょう。一人はイボ語を母国語として話します。2人目は1人目とのやり取りを望んでいますが、1人目はヨルバ語を第一言語として話します。
私たちは何ができる?
ありがたいことに、この例の3人目は英語を話しながら育ちましたが、たまたま第二言語としてイボ語とヨルバ語の両方を話すため、最初の2人の仲介者としての役割を果たすことができます。
プログラミングの世界では、最初の「人」はPython、2番目の「人」はRuby、3番目の「人」はJSONであり、たまたまRubyをPythonに「変換」したり、その逆を行ったりすることができます。明らかに、このアナロジーは完璧なものではありませんが、バイリンガルの誰かとして、JSONが他のプログラミング言語とどのように相互作用するかを調べる簡単な方法だと思います。
JSON(JavaScriptオブジェクト表記)は、データ交換/転送用の軽量のデータ形式です。JavaScriptと同様に、キーと値のペアです。REST APIの場合、サーバーからクライアントへのデータ転送に広く使用されています。現在、多くのソーシャルメディアサイトがこれを使用しています。データ型に関しては、XMLほど堅牢ではありません。XMLには非常に豊富なデータ型とXSDがあります。JSONはこれに少し欠けています。
同じ量の文字列データの場合、XMLにはすべての開始タグと終了タグなどがあるため、JSONはXMLに比べて軽量になります。
次のコードを試して、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"}]';
?>