json使用小結

json是一種輕量級的傳輸格式, 是javascript源生的傳輸數據的格式,最簡單的json格式:

{"key":"value"} 鍵和值之間用冒號分隔

個人覺得json中最小的單元就是{"key":"value"},它可以組合成許多複雜的結構,json有兩種結構:

1、key/value對的集合,就像上面最簡單的例子一樣,在許多不同的語言中,這種結構被理解爲  對象(object)、記錄(record)、結構(struct)、哈希表(HashTable)等,在java web開發中,常用到的model層模型就是這種結構的,比如一個對象裏面有許多屬性,屬性的名字就相當於key,屬性的值就是value

2、值的有序列表——數組

如果有多個key/value對,他們之間用逗號分隔

{"key0":"value0","key1":"value1","key2":"value2"}

複雜結構:

{
"students":[{"key0":"value0"},{"key1":"value1"}],
"teachers":[{"firstName":"阿坤"},{"123":"456"}],
"worker":[{"key1":{"name":"value1"}},{"key2":"value2"},{"key3":"value3"}]

}

使用方法:   students[0].key0   得到字符串value0     teachers[1].123    得到字符串456    worker[0].key1.name  得到字符串value1

 

json與s2結合使用:

s2用package管理action   :

 

<package name="gc" namespace="/gc" extends="json-default">
    	<action name="initData" class="GCSubplateAction" method="initData">
    		<result name="create">/pages/ipad/create.jsp</result>
    		<result name="query">/pages/ipad/query.jsp</result>
    	</action>
    	
    	<action name="query" class="GCSubplateAction" method="query">
    		<result name="create">/pages/ipad/create.jsp</result>
    		<result name="query">/pages/ipad/query.jsp</result>
    	</action>
    	<action name="initDate" class="GCSubplateAction" method="initDate">
    		<result type="json">
    			<param name="includeProperties">
    				args123.*
    			</param>
    		</result>
    	</action>
    </package>


關鍵點: extends="json-default"   <result type="json">   <param name="includeProperties"> args123.* </param> 其實package繼承的包只做了兩個工作,

json-default其實也是最終繼承struts-default的 json-plugn中struts-plugn.xml源碼如下

<struts>      
<package name="json-default" extends="struts-default">          
<result-types>              
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>       
</result-types>          
<interceptors>              
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>          
</interceptors>      
</package>  
</struts>  

這裏你可以看到這個json-default是幹了什麼事情,無非就是:

1 加了個名爲json的result類型

2 加了一層名爲json的攔截器所以 對於你的問題,可以說 不繼承json-default  ,可以,但是你必須在你的struts.xml中添加一個resultType 也就是在你的struts.xml 的<struts>節點下添加以下內容:  

  <result-types>           

 <result-type name="json" class="org.apache.struts2.json.JSONResult"/>      

 </result-types>----這裏的name就按照你喜歡的取了

然後在你配置的攔截器聲明中加上           

 <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>也就是json攔截器的聲明

 

 

 

在瀏覽器中直接輸入應用json的這個action的地址  :http://localhost:7001/gc/initDate.action    struts配置文件裏可以發現  initDate這個action是調用initDate方法, 方法的內容如下:

public String initDate() throws Exception{
				
		Map<String,String> paramMap = new HashMap<String,String>();
		String currentDate = CommUtil.getCurrentDate();//獲取當前時間
		String createEndDate = CommUtil.replaceAll(currentDate, "-", "");
		String createBeginDate = CommUtil.replaceAll(CommUtil.addMonth(currentDate, -1), "-", "");
		paramMap.put("createBeginDate", createBeginDate);
		paramMap.put("createEndDate", createEndDate);
		this.setArgs123(paramMap);
		
		return SUCCESS;
	}

這個action裏有 個專門接收json數據的Map<String,String> args123   這裏的名字可以隨便取,只要在配置文件中寫上相應的  XXX.*即可, 比如上面配置文件的    args123.* 不過這裏有一個小bug  就是   屬性名的第二個字符不要大寫,因爲這個屬性的getter和setter會自動把第一個字母大寫,如果你第二個字符是大寫的  就成了  getARgs123  java就會認爲, 原來的屬性名是  args123  而不是你定義的aRgs123   就會拋異常

 

輸入剛纔的地址後,就會自動下載一個文件,下載下來以後, 文件的內容就是json格式的數據了


 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章