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を計算して得られた値です.
以下は例です
クライアント:
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
ブラウザがサーバからデータを受信する場合、それらのデータはブラウザで理解できる形式で送らなければなりません.サーバー側のプログラミング言語は以下の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);
}