JSON ( JavaScript Object Notation )
JSON/簡単なテスト:基本
object
{ members }
{}
members
string : value
members , string : value
array
[ elements ]
[]
elements
value
elements , value
value
string
number
object
array
true
false
null


引用from:『 Introducing JSON
JSON (JavaScript Object Notation) は、軽量なデータ交換フォーマットです。それは、人間にとって読みやすく、書きやすく、また、機械にとっても解析と生成の容易な形式です。JavaScript(ECMAScript)にもとづくサブセットです。

JSONは言語から完全に独立したテキスト形式ですが、C言語ファミリーのプログラマにとって、なじみ深い慣習を使用します、C、C++、C#、Java、JavaScript、Perl、Python、他。。

これらの特性はJSONを理想的なデータデータ交換言語にします。

『Introducing JSON http://www.crockford.com/JSON/index.html


JSONのオブジェクト
JSONはECMA262に定義された JavaScriptのオブジェクト・リテラルから派生した、テキスト形式の構造化データフォーマットです。 JSONは4つのプリミティブタイプ(strings, numbers, booleans,and null)と 2つの構造化されたタイプ(objects and arrays)を表すことができます。

objectsタイプの書式は、object = { string : value }とかobject = { string : value,string : value,... }という感じ。
arraysタイプの書式は、array = [ value,value ]とか[value,value,...]という感じ。

JavaScriptの縮小版ですから受信したデータはJavaScriptとしてさくさく使うことができます。

  • オブジェクト
  • プロパティ
  • メソッド
  • メソッド (引数)

    なにはともあれテストしてみましょう。



    オブジェクト

     まずデータ交換する前に、スクリプト内での動作を確認します。たとえば、次のようなJSONフォーマットに基づいたスクリプトを用意します。
    	var myJSONObject = 
    	{
    		"test": "hello"
    	};
    
    次に、この型をtypeofで調べてみます。
    <script language = "JavaScript">
    <!--
    	var myJSONObject = 
    	{
    		"test": "hello"
    	}
    //-->
    </script>
    <form>
    	alert( typeof myJSONObject )
    	<input type    = "button"
    	       onclick = "alert( typeof myJSONObject )"
    	       value   = "click">
    </form>
    
    
    alert( typeof myJSONObject )
     どうですか?そう、オブジェクトなんです。じゃ、いろいろやってみましょう。

    プロパティ

    まず、オブジェクトのプロパティについて調べます。
    <script language = "JavaScript">
    <!--
    	var myJSONObject2 = 
    	{
    		"test": "hello"
    	}
    //-->
    </script>
    <form>
    	alert( myJSONObject2 )
    	<input type    = "button"
    	       onclick = "alert( myJSONObject2 )"
    	       value   = "click">
    
    	alert( myJSONObject2.test )
    	<input type    = "button"
    	       onclick = "alert( myJSONObject2.test )"
    	       value   = "click">
    
    	myJSONObject2.test = 'new test' ; alert( myJSONObject2.test )
    	<input type    = "button"
    	       onclick = "myJSONObject2.test = 'new test' ; alert( myJSONObject2.test )"
    	       value   = "click">
    </form>
    
    alert( myJSONObject2 )


    myJSONObject2オブジェクトのtestプロパティを取り出します
    alert( myJSONObject2.test )


    myJSONObject2オブジェクトのtestプロパティ値を'new test'に書き換えてから取り出します
    myJSONObject2.test = 'new test' ; alert( myJSONObject2.test )


    それでは、プロパティが複数あったときはどうでしょうか?
    <script language = "JavaScript">
    <!--
    	var myJSONObject3 = 
    	{
    		"test1": "hello1",
    		"test2": "hello2",
    		"test3": "hello3"
    	}
    //-->
    </script>
    <form>
    	myJSONObject3オブジェクトのtest1プロパティを取り出します
    	alert( myJSONObject3.test1 )
    	<input type    = "button"
    	       onclick = "alert( myJSONObject3.test1 )"
    	       value   = "click">
    
    	myJSONObject3オブジェクトのtest2プロパティを取り出します
    	alert( myJSONObject3.test2 )
    	<input type    = "button"
    	       onclick = "alert( myJSONObject3.test2 )"
    	       value   = "click">
    
    	myJSONObject3オブジェクトのtest3プロパティを取り出します
    	alert( myJSONObject3.test3 )
    	<input type    = "button"
    	       onclick = "alert( myJSONObject3.test3 )"
    	       value   = "click">
    </form>
    
    myJSONObject3オブジェクトのtest1プロパティを取り出します
    alert( myJSONObject3.test1 )


    myJSONObject3オブジェクトのtest2プロパティを取り出します
    alert( myJSONObject3.test2 )


    myJSONObject3オブジェクトのtest3プロパティを取り出します
    alert( myJSONObject3.test3 )


    全く普通ですね。



    メソッド

    こうなると、オブジェクトのメソッドも試したくなりませんか?
    <script language = "JavaScript">
    <!--
    	var myJSONObject4 = 
    	{
    		"test1": "function (){ alert('This is method test1') }"
    	}
    //-->
    </script>
    <form>
    	myJSONObject4オブジェクトのメソッドtest1()を実行します
    	<input type    = "button"
    	       onclick = "eval(myJSONObject4.test1())"
    	       onclick = "eval('a='+myJSONObject4.test1);a()"
    	       value   = "click">
    </form>
    
    myJSONObject4オブジェクトのメソッドtest1()を実行します


    *注意:JSONの構造化タイプはObjectとArrayだけです。このメソッドテストは、 valueとしてのfunctionの利用方法ということです。ただ、それをvalueのStringとすると、ドラフトによればクオートが必要な ようなので追加してeval()するようにしてみました。(*書き間違えてましたf^^;; m(_ _)m)



    メソッド (引数)

     では、メソッドの引数はどう渡せば良いでしょう?
    <script language = "JavaScript">
    <!--
    
    	var myJSONObject5 = 
    	{
    		"test2": "function (arg){ alert('This is a argument : '+arg) }"
    	}
    
    //-->
    </script>
    <form>
    	myJSONObject5オブジェクトのメソッドtest2()に引数'hello'を与えて実行します<br>
    	<input type    = "button"
    	       onclick = "eval('var a='+ myJSONObject5.test2 +'');a('hello')"
    	       value   = "click"> 
    	<input type    = "button"
    	       onclick = "eval('('+ myJSONObject5.test2 +')(\'hello\')');"
    	       value   = "click"> 
    </form>
    
    myJSONObject5オブジェクトのメソッドtest2()に引数'hello'を与えて実行します




  • 【作業用掲示板】