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格式的数据了


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值