在Java应用中使用Json

来源:互联网 发布:js自定义属性 编辑:程序博客网 时间:2024/05/19 13:08

一、what's Json?

          JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。在数据传输数据过程中,传递的只是一种符合Json语法格式的字符串,归根到底,传输的还是字符串。在web应用程序开发中,可以通过json实现前台与后台之间的数据交换。

         JSON建构有两种结构:  

         json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组2种结构,通过这两种结构可以表示各种复杂的结构

  1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。在Java中就是一种Map结构。

  2、数组:数组在js中是中括号“[]”扩起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。在Java中是一种list结构。

  经过对象、数组2种结构就可以组合成复杂的数据结构了。

二、Json in Javascript

使用Json语法创建对象

      var people = {"name":"jack","sex":"mail"};

     可以通过这种语法创建json对象,用“{}”括起来,用“,”隔开key:value对,下面是这种语法示意图:


使用Json语法创建数组

      var arr =[value1,value2...];

     一个包含多个people的数组 peoples = [{"name":"jack","sex":"mail"},{"name":"lily","sex":"femail"};

     Json数组可以通过这种语法创建,用"[]"括起来,数组元素之间用“,”分隔开,下面是这种语法的示意图:

      在使用Json格式字符串与服务器交互时候,可以利用Json扩展的方法将字符串转换成一个JavaScript对象,或者将一个对象转换成Json格式字符串。不过先要登录http://www.json.org下载Json2.js文件。引入该包后,js对象直接用toJSONString()装换为字符串格式,字符串可以用parseJSON()转换成js对象。

访问数据

      只需用点号表示法来表示数组元素。所以,要想访问 上面peoples列表的第一个条目的名字,只需在 JavaScript 中使用下面这样的代码:

      peoples[0].name

      利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript 工具包或 API。

修改数据

     正如可以用点号和方括号访问数据,也可以按照同样的方式轻松地修改数据:  

     peoples[0].name = "Rachmaninov";   

     在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。

三,Struts2的Json支持

      JSON 是一个插件,它允许我们在JavaScript中异步调用Action,它提供了一个json的返回结果类型(ResultType),只要为Action指定类型为

json返回结果类型,那么这个响应结果不需要返回给任何视图层,JSON会将Action里的状态信息序列化为JSON指定格式的数据,并将该数据返回

给JAVASCRIPT,这样可以完成AJAX的应用交互.

      将Struts2解压缩目录的lib子目录下struts2-json-plugin-2.2.1.jar 文件复制到Web应用的WEB-INF\lib目录下,即可为Struts2应用增加JSON插件。

      配置返回JSON字符串的Action与普通Action有小小区别,应该未该Action配置类型为Json的Result,且无需配置任何视图类型。Action类的写法与普通一样。

      配置Action的Struts.xml文件代码如下。

[html] view plaincopy
  1. <?xml version="1.0" encoding="GBK"?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
  5. <struts>  
  6.        <!-- 配置包时,自己的包继承了json-default包,而不在继承默认的default包,这是因为只有在该包下才有json类型的Result -->  
  7.        <package name="example"  extends="json-default">  
  8.         <action name="" class="">  
  9.             <!-- 配置类型的json的Result -->  
  10.             <result type="json">  
  11.                 <!-- 为该Result指定参数 -->  
  12.                 <param name="noCache">true</param>  
  13.                 <param name="contentType">text/html</param>  
  14.                 <!-- 设置只序列Action的map属性,返回单个Action属性时候使用 -->  
  15.                 <!--  param name="root">map</param -->  
  16.                         </result>  
  17.         </action>  
  18.     </package>  
  19. </struts>  
      Json类型的Result参数说明:

ignoreHierarchy参数:表示是否忽略等级,也就是继承关系,比如:TestAction继承于BaseAction,那么TestAction中返回的json字符串默认是不会包含父类BaseAction的属性值, 
ignoreHierarchy值默认为true,设置为false后会将父类和子类的属性一起返回。 
<result type="json"> 
<param name="ignoreHierarchy">false</param> 
</result> 

excludeNullProperties参数:表示是否去掉空值,默认值是false,如果设置为true会自动将为空的值过滤,只输出不为空的值。 
<result type="json"> 
<param name="excludeNullProperties">true</param> 
</result> 

root参数:从返回结果中根据ognl表达式取出你需要输出的结果。 
只输出person对象的name属性值,配置如下: 
<result type="json"> 
<param name="root">person.name</param> 
</result> 

includeProperties参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。 
<result type="json"> 
<param name="includeProperties">person.*, person\.name</param> 
</result> 

excludeProperties参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties参数。


此外,struts2-json-plugin-2.2.1.jar还提供了一个JSONUtil工具类,支持将java类转换成字符串,但从json转换成java对象就只能转换成Map或者List类型。

四、Gson的Json支持

        在java中可以通过Json-lib或者google的Gson来实现在 Java 对象和 JSON 数据之间进行映射。相比之下,Gson操作会更简单更小巧,但功能却一样强大,不管是对象还是数组,还是较复杂的map集合,操作都是一样的,Gson是出自google,应为比较小巧,所以其自己系统android上面用的也是这个。

Gson使用:

1.首先创建一个Gson对象

Gson gson = new Gson();//创建一般对象

Gson gson = Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm").create();//设置指定日期格式,转换时候日期类型按照指定的格式转换

2.通过Gson对象的fromJSON方法将json字符串转换成指定Java类型

3.通过Gson对象的toJSON方法可以将对象转换成字符串。

0 0