Json詳細

6421 ワード

以前はJsonだけを知っていましたが、何の役に立つか分かりませんでした.今日は詳しく調べてみました.
ブラウザがサーバからデータを受信する場合、それらのデータはブラウザで理解できる形式で送らなければなりません.サーバー側のプログラミング言語は以下の3種類の形式でデータに戻ります.xml、json、html JSON:JavaScriptオブジェクト表示法(JavaScript Object Notation)はテキスト情報を格納し交換する文法です.軽量級のデータ交換フォーマットはXMLに似ています.XMLより小さく、より速く、より解析しやすいです.Jsonはjavascriptの元のフォーマットで、これはjavascriptの中でjsonデータを処理していかなる特殊なappiあるいはツールのカバンがいらないことを意味します.XMLの違いに比べて、エンドマークがなく、短くて、読み書きのスピードが速くて、ビルドされたJavaScript eval()の方法で解析できます.配列を使って予約文字を使わないで、なぜJSONを使うのですか?AJAXアプリケーションでは、JSONはXMLよりももっと使いやすいです.XMLを使ってXMLドキュメントを読み、XML DOMを使ってドキュメントを巡回し、値を読み取り、変数に保存します.JSON文字列を読み、eval()でJSON文字列Json規則を処理するのは簡単です.a.映射用コロン「:」は、名前:値b.並列のデータ間でカンマ(カンマ)を表します.区切り.名前1:値1、名前2:値2 c.マッピングのセット(オブジェクト)は、大かっこ({})で表されます.{名称1:値1、名称2:値2}d.並列データの集合(配列)は、四角い括弧([])で表されます.要素値が持つタイプ:string、number、object、array、true、false、null Jsonはテキスト文字列だけで、reponseText属性に格納されています.レスポンスText属性に格納されているパラメータを読み込むために、必要な文字列Jlse、null Jsonは文字列だけです.この文字列はjsコードとして実行されます.jsonの文字列はjsコードから構成されていますので、それ自体は実行可能です.evalはstringを計算して得られた値です.
以下は例です
クライアント:
	<body>
		<script type="text/javascript">
<%--
 
  // json        ,                  
  //js       json
  var people={"name":"ljf","age":"20","email":"[email protected]"};

  
  //    
  var people1=[
               	{"name":"ljf","age":"20","email":"[email protected]"},
               	{"name":"ljf1","age":"21","email":"[email protected]"}
              ]

  //  
  var peoples={"param1":
	  			[
	               	{"name":"ljf","age":"20","email":"[email protected]"},
	               	{"name":"ljf1","age":"21","email":"[email protected]"}
              	],
              	"param2":
              	[
 	               	{"no":"123","class":"2"},
 	               	{"name":"ljf1","age":"21","email":"[email protected]"}
               	]  	
  			  }

  var information={
		  		  "name":"ljfbest",
		  		  "age":"20",
		  		  "tel":"155555555",
		  		  address:[
							  {"family":"shangqiu","code":"123333"},
							  {"company":"nyist","code":"1222333"}		
						  ]
		           }//         ,    address
  alert(information.address[0].family);
  
  --%>
  
  function ajaxFunction(){
	  var xmlHttp;
	  try{
		  xmlHttp=new XMLHttpRequest();
	  }catch(e){
		  try{
			  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		  }catch(e){
			  try{
				  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP")
			  }catch(e){}
		  }
	  }
	  return xmlHttp;
  }
  
  window.onload=function(){
	    document.getElementById("ok").onclick= function()//                  
        {  
	    	var xmlReq=ajaxFunction();
	    	xmlReq.onreadystatechange=function(){
	    		if(xmlReq.readyState==4){
	    			if(xmlReq.status==200||xmlReq.status==304)
	    				var data=xmlReq.responseText;
	    				alert(data);//               "{pid:1,pname:'  '}"
	    				var dataObj=eval("("+data+")");//      json obj,       ()
	    				alert(dataObj[1].pname);//dataObj: Object pid: 1 pname: "  "
	    				for(var i=0;i<dataObj.length;i++)
	    					alert(dataObj[i].pname);
	    		}
	    	}
	        //post    ,     post  ,  
	        xmlReq.open("post","/test/JsonServlet?cache="+new Date(),true);  
	        xmlReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  
	        xmlReq.send(null);  
          }
    
  }
  </script>
		<select id="province" name="province">
			<option value="">
				   ...
			</option>
		</select>

		<button id="ok">  </button>
	</body>
サーバ端:
public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		/***********************************************************
		String str="{pid:1,pname:'  '}";
		***********************************************************/
		String str="[{pid:1,pname:'  '},{pid:2,pname:'  '},{pid:3,pname:'  '}]";
		out.print(str);
	}
javaの中でよく一連の対象に関連して、対象はとても多くて、一つのjsonの対象をつづり合わせて、とても面倒で、下の例はprovinceを一つの種類に書いて、第三の種類の倉庫jsonを使います.http://json-lib.sourceforge.net/)使用するjarパッケージ:
json-lib-244-jdk 15.jar、commons-lang 2.5、 comons-beanutils 1.8.0、comons-collection s 3.2.1、comons-logging 1.1.1、ezmorph 1.0.6
public class Province {
	private int id;
	private String pname;
	public Province(int id, String pname) {
		super();
		this.id = id;
		this.pname = pname;
	}
	//  getter,setter……
}
public class JsonServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/******************************     json  *********************/
		List<Province> list=new ArrayList<Province>();
		Province p1=new Province(1, "  ");
		Province p2=new Province(2, "  ");
		Province p3=new Province(3, "  ");
		list.add(p1);
		list.add(p2);
		list.add(p3);

		//JSONArray jsonArray=JSONArray.fromObject(list);//json_lib
		//System.out.println(jsonArray);//[{"id":1,"pname":"  "},{"id":1,"pname":"  "},{"id":1,"pname":"  "}]
		
		//           
		JsonConfig config=new JsonConfig();
		config.setExcludes(new String[]{"id"});
		JSONArray jsonArray=JSONArray.fromObject(list,config);
		System.out.println(jsonArray);//[{"pname":"  "},{"pname":"  "},{"pname":"  "}]
		
		/****************************     json  *********************/
		Province p=new Province(4,"  ");
		JSONObject jsonObject=JSONObject.fromObject(p);
		System.out.println(jsonObject);
		
	}