`

JSON的使用(js/java)总结

阅读更多
JSON的使用(js/java)总结
 
最近做一个模块,在项目在就应用了 ajax来实现异步刷新分页。由于查询参数很多且包括不同的类型。如数组,set,date等。所以本人在这里用json来进行参数传递。
以前做的项目中用到了 jqery,也大量使用ajax。但由于项目框架是公司平台,很多东西都是现成的,虽然也大量用json.但对json还是只有浅显的了解。
   由于以前的项目源码一时找不到,找到了整理也觉费事,所以这次是自己动手,也正好加深自己对json的理解,做一个简单总结,和大家共享。
   很多时候,自己动手跟在一个已有框架中照搬他人的是大不一样的,自己做的时候需要去了解很多的细节,己也能更好地掌握相关知识。

  一.客户端(jsp页面javaxscript)
首先页面要导入json.js.可到官网下载。www.json.org,我的附件中也有。
   javaEE在客户端通常是ajax请求才会用到json来传递参数。
    先声明一个对象:
   var taskQueryJson={};
   taskQueryJson.pageNum=10;
   taskQueryJson.pageSize=10;
   taskQueryJson.isAllType=true;
   taskQueryJson.beginQueryTime="2010-12-20 10:19:30";
 
    jquery中默认会自己将对象参数转换成json字符串。这里以原生ajax为例:
var url = "/progress/taskProgressQuery.do?JSON="+JSON.stringify(taskQueryJson);    
则如上即可,用JSON.stringify方法或toJSONString方法都可以。
如果在前台要把json字符串转换成对象。则调用javascript自身的eval函数:
var result=eval('(' + userJsonStr+ ')');就会把返回的json字符串转换成json对象。
也可以象下面,下面是json.js 中的方法:
var obj = str.parseJSON(); //由JSON字符串转换为JSON对象

    或者

    var obj = JSON.parse(str); //由JSON字符串转换为JSON对象


二. json in java中.
   后台主要是把传递过来的json字符串转换成java bean或者将对象转换成字符串向客户端返回。
  首先要导入json的jar包( 首先到官网下载)。有包名org.json命名的的json.jar和包名为net.sf.json的json-lib.jar;两个包有所不同,大家要注意,我这里采用后面的jar包。json-lib-2.3-jdk13.jar,大家在使用的时候还要注意所支持的jdk版本,如这是支持jdk1.5以前版本的jar包,json-lib-2.3-jdk15.jar则只支持jdk1.5及以上版本,另外这个包还依赖ezmorph.jar,commons-lang.jar; commons-beanutils.jar;commons-collections.jar;commons-logging.jar;这 些jar包。ezmorph.jar最好用1.0.6版本。
   下面是示例。
对于日期的处理,需要注意。下面有一个专门的日期格式处理类。

  这是写一个简单的工具类:
import java.io.Writer;
import java.util.Collection;
import java.util.Date;

import net.sf.ezmorph.object.DateMorpher;
import net.sf.json.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;
import net.sf.json.util.JSONUtils;
import stat2.common.task.domain.TaskQuery;

public class JsonUtils {

/**
*
* @param json
* @param c
* @param excludes 不需要转换的属性数组 
* @param datePattern 日期转换模式 
* @return
*/
public static Object json2Bean(String json,Class c,String[] excludes, String datePattern){
JSONObject jsonObject=fromObject(json,excludes,datePattern);
return JSONObject.toBean(jsonObject, c);
}

/**
*
* @param json
* @param c
* @param excludes 不需要转换的属性数组 
* @return
*/
public static Object json2Bean(String json,Class c,String[] excludes){
JSONObject jsonObject=fromObject(json,excludes,null);
return JSONObject.toBean(jsonObject, c);
}

/**
*
* @param json
* @param c
* @param datePattern 日期转换模式
* @return
*/
public static Object json2Bean(String json,Class c, String datePattern){
JSONObject jsonObject=fromObject(json,datePattern);
return JSONObject.toBean(jsonObject, c);
}

/**
*
* @param json
* @param c
* @return
*/
public static Object json2Bean(String json,Class c){
JSONObject jsonObject=fromObject(json);
return JSONObject.toBean(jsonObject, c);
}

/**
* 取得json字符串中的一个key所对应的字符串值
* @param json
* @param key
* @return
*/
public static  String getString(String json,String key){
JSONObject jsonObject=fromObject(json);
return jsonObject.getString(key);
}

/**
* 取得json字符串中的一个key所对应的值
* @param json
* @param key
* @return
*/
public static  Object get(String json,String key){
JSONObject jsonObject=fromObject(json);
return jsonObject.get(key);
}

/**
* 将对象转换成json字符串
* @param object
* @return
*/
public static String getJsonString(Object object){
String jsonString = null;
  if(object != null){
   if(object instanceof Collection || object instanceof Object[]||object instanceof String[]||object instanceof int[]||
                   object instanceof long[]||object instanceof double[]||object instanceof float[]){
   jsonString = JSONArray.fromObject(object, getconfigJson(null, null)).toString();
   }else{
   return  fromObject(object).toString();
   }
  }
  return jsonString == null ? "{}" : jsonString;

}

private static JSONObject fromObject(Object obj, String datePattern) {   
        return fromObject(obj,null,datePattern);
   }
  
private static JSONObject fromObject(Object obj,String[] excludes, String datePattern) { 
setDateFormat2Java();
JsonConfig jsonConfig=getconfigJson(excludes,datePattern);
return JSONObject.fromObject(obj,jsonConfig);
   }



private static JSONObject fromObject(Object obj){
return fromObject(obj, null,null);
}

/** 
  * 配置json-lib需要的excludes和datePattern. 
  * 
  * @param excludes 不需要转换的属性数组 
  * @param datePattern 日期转换模式 
  * @return JsonConfig 根据excludes和dataPattern生成的jsonConfig,用于write 
  */  
private static JsonConfig getconfigJson(String[] excludes,  
     String datePattern) {  
     JsonConfig jsonConfig = new JsonConfig(); 
   //  if(null!=excludes)
     jsonConfig.setExcludes(excludes);
    
     jsonConfig.setIgnoreDefaultExcludes(false);  
     jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);  
     jsonConfig.registerJsonValueProcessor(Date.class,  
         new DateJsonValueProcessor(datePattern));  
   
     return jsonConfig;  


/** 
  * write. 
  * 
  * @param bean obj 
  * @param writer 输出流 
  * @param excludes 不转换的属性数组 
  * @param datePattern date到string转换的模式 
  * @throws Exception 写入数据可能出现异常 
  */  
public static void write(Object bean, Writer writer,  
     String[] excludes, String datePattern) throws Exception {  
     JsonConfig jsonConfig = getconfigJson(excludes, datePattern);  
   
     JSON json = JSONSerializer.toJSON(bean, jsonConfig);  
   
     json.write(writer);  


private static void setDateFormat2Java(){
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[]{"yyyy-MM-dd HH:mm:ss","yyyy-MM-dd"}));
}
/**
* @param args
*/
public static void main(String[] args) {
String jsonObjString="{\"isAllUser\":\"false\",\"statuses\":[2],\"isAllType\":\"true\",\"pageNum\":2,\"beginQueryTime\":\"2010-12-03 12:12:12\"}";
TaskQuery taskQuery=(TaskQuery)json2Bean(jsonObjString, TaskQuery.class);
System.out.println(taskQuery.getBeginQueryTime());
System.out.println(taskQuery.getIsAllUser());
System.out.println(taskQuery.getStatuses());

}

}

2.一个日期转换类
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

public class DateJsonValueProcessor implements JsonValueProcessor {

  /** * logger. */
    private static Log logger = LogFactory.getLog(DateJsonValueProcessor.class);

    /** * 默认的日期转换格式. */
    public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd:hh:mm:ss";

    /** * 日期转换器. */
    private DateFormat dateFormat;

    /**
     * 构造方法.
     *
     * @param datePattern 日期格式
     */
    public DateJsonValueProcessor(String datePattern) {
        try {
        datePattern=null==datePattern?DEFAULT_DATE_PATTERN:datePattern;
            dateFormat = new SimpleDateFormat(datePattern);
        } catch (Exception ex) {
            logger.error(ex);
            dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
        }
    }

    /**
     * 转换数组?.
     *
     * @param value Object
     * @param jsonConfig 配置
     * @return Object
     */
    public Object processArrayValue(Object value, JsonConfig jsonConfig) {
        return process(value);
    }

    /**
     * 转换对象.
     *
     * @param key String
     * @param value Object
     * @param jsonConfig 配置
     * @return Object
     */
    public Object processObjectValue(String key, Object value,
        JsonConfig jsonConfig) {
        return process(value);
    }

    /**
     * 格式化日期.
     *
     * @param value Object
     * @return Object
     */
    private Object process(Object value) {
        try {
            return dateFormat.format((Date) value);
        } catch (Exception ex) {
            return null;
        }
    }

}

TaskQuery是一个普通java bean.具有相应属性及Setter和getter方法。见附件。
JsonUtils中的main函数中是简单的示例代码,运行JsonUtils.就可以得到输出结果。

上述代码及jar包也均在附件中。

google的gson.jar也不错,不过本人还很少使用它,这里只把这个jar包传在这里。相关文章很多,推荐可以看看这个[url]http://www.cnblogs.com/zero0/articles/1874792.html
[/url]
3
0
分享到:
评论

相关推荐

    Java中使用Json

    在Java编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人和机器都能轻易地阅读和编写。JSON格式基于JavaScript的一个子集,但与语言无关,因此在各种编程语言中,包括Java,都有广泛...

    java服务端生成json(json服务端)

    总结来说,Java服务端生成JSON涉及的主要知识点包括: 1. JSON数据格式的理解及其在数据交换中的作用。 2. 使用Gson或FastJson库进行JSON序列化和反序列化。 3. 结合HTTP服务器框架处理JSON响应。 4. 调试和测试JSON...

    JAVA中用到的json包

    在Java编程语言以及基于J2EE的企业级应用开发中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式。它易于人阅读和编写,同时也容易让机器解析和生成。JSON包在Java中扮演着至关重要的角色,...

    多层集合嵌套的JSON数据转化为Java对象(src.zip)

    在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于服务器与客户端之间传递数据。Java作为一种常用的后端开发语言,需要处理这些JSON数据,将其转化为Java对象以便于操作。本主题...

    java调用json参数的webservice

    综上所述,通过Java调用带有JSON参数的WebService,涉及到了Java编程语言的使用、JSON数据格式的处理以及WebService通信机制。开发者需要掌握这些技术来实现不同类型的应用程序之间的互操作性和数据交换。

    json转对象(java 多级嵌套)

    总结,Java中处理JSON到对象的转换,特别是面对多级嵌套的情况,关键在于理解JSON结构并构建相应的Java对象模型,然后利用如Jackson这样的库进行数据映射。通过熟练掌握这些工具和技巧,可以有效地在Java应用中处理...

    JAVA-JSON工具转换类

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务和应用程序之间的数据传输,因为它易于读写,同时也被人类和机器所理解。在JAVA开发中,处理JSON数据通常需要借助特定的库来完成...

    使用json-lib将java对象转换成json字符串

    标题中的“使用json-lib将java对象转换成json字符串”指的是在Java编程中,利用json-lib这个库来将Java对象转化为JSON格式的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端...

    JSON-RPC-Java实例

    JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架. 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码。...我们可以很方便的使用JSON-RPC-Java来开发我的们Ajax应用。

    java json api,json api

    总结来说,Java JSON API,特别是`json-lib`库,是Java开发者处理JSON数据的一个重要工具。它提供了一系列方便的API,使得JSON的创建、解析、转换变得简单,同时与其他数据格式如XML的交互也十分便捷。在理解并熟练...

    java 解析 json文件 java 解析 json文件

    总结来说,Java中解析JSON文件有多种方法,可以根据项目需求选择合适的库。Jackson和Gson通常更受开发者欢迎,因为它们提供了方便的数据绑定功能。无论选择哪种方式,都需要确保正确地映射JSON结构到Java对象,以便...

    JSON-RPC for Java使用说明.doc

    以下是 JSON-RPC for Java 使用说明的知识点总结: 首先,让我们了解什么是 JSON-RPC。JSON-RPC 是一种基于 JSON(JavaScript Object Notation)的远程过程调用协议,使用 JSON 编码数据进行数据交换。它的主要特点...

    java解析json完整案例

    在Java中,我们可以使用多种库来处理JSON,其中最常用的包括`org.json`库和`Jackson`库。本案例主要涉及`org.json`库,它是一个小巧且功能强大的JSON库,适用于Java平台。 首先,我们需要在项目中引入`org.json`库...

    json格式转换为java实体类,idea导入即可

    总结来说,这个资源提供了一个便捷的IDEA插件功能,使得开发者能快速地将JSON格式的数据转换成Java实体类,大大提高了开发效率。无论是在日常开发还是在快速原型设计中,这都是一个值得利用的工具。

    java中对单层json进行key字母排序

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于Web服务和应用程序之间的数据传输。在某些场景下,我们可能需要按照JSON对象(JSONObject)中的键(key)的字母顺序来排列键值对,例如为了...

    Java中使用Json的net.sf.json包

    在Java开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛用于前后端数据交互。为了在Java中处理JSON数据,开发者通常会使用特定的库,如`net.sf.json`包,这是一个非常实用的JSON库...

    根据json串自动生成JAVA BEAN工具

    在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于服务器与客户端之间的数据传输,因为它的结构清晰、易于读写。JavaBean是Java编程中的一种设计模式,它代表一个对象,通常包含...

Global site tag (gtag.js) - Google Analytics