`
babydeed
  • 浏览: 238027 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

json数据与JAVA数据的转换

    博客分类:
  • Ext
阅读更多
转自:http://zhkac.iteye.com/blog/505218
1、DTO:Data Transfer Object,数据传送对象

2、对于日期格式的问题,也已经处理

3、json-lib-2.2.2-jdk13.jar (2.1在日期数组 json->java有问题)

工具类JsonUtil代码如下:

Java代码
public class JsonUtil {  
 
    /**页面传至后台时,json数据在request的参数名称*/ 
    public final static String JSON_ATTRIBUTE = "json";  
    public final static String JSON_ATTRIBUTE1 = "json1";  
    public final static String JSON_ATTRIBUTE2 = "json2";  
    public final static String JSON_ATTRIBUTE3 = "json3";  
    public final static String JSON_ATTRIBUTE4 = "json4";  
      
    /** 
     * 从一个JSON 对象字符格式中得到一个java对象,形如: 
     * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...}} 
     * @param object 
     * @param clazz 
     * @return 
     */ 
    public static Object getDTO(String jsonString, Class clazz){  
        JSONObject jsonObject = null;  
        try{  
            setDataFormat2JAVA();   
            jsonObject = JSONObject.fromObject(jsonString);  
        }catch(Exception e){  
            e.printStackTrace();  
        }  
        return JSONObject.toBean(jsonObject, clazz);  
    }  
      
    /** 
     * 从一个JSON 对象字符格式中得到一个java对象,其中beansList是一类的集合,形如: 
     * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...}, 
     * beansList:[{}, {}, ...]} 
     * @param jsonString 
     * @param clazz 
     * @param map 集合属性的类型 (key : 集合属性名, value : 集合属性类型class) eg: ("beansList" : Bean.class) 
     * @return 
     */ 
    public static Object getDTO(String jsonString, Class clazz, Map map){  
        JSONObject jsonObject = null;  
        try{  
            setDataFormat2JAVA();   
            jsonObject = JSONObject.fromObject(jsonString);  
        }catch(Exception e){  
            e.printStackTrace();  
        }  
        return JSONObject.toBean(jsonObject, clazz, map);  
    }  
      
    /** 
     * 从一个JSON数组得到一个java对象数组,形如: 
     * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...] 
     * @param object 
     * @param clazz 
     * @return 
     */ 
    public static Object[] getDTOArray(String jsonString, Class clazz){  
        setDataFormat2JAVA();  
        JSONArray array = JSONArray.fromObject(jsonString);  
        Object[] obj = new Object[array.size()];  
        for(int i = 0; i < array.size(); i++){  
            JSONObject jsonObject = array.getJSONObject(i);  
            obj[i] = JSONObject.toBean(jsonObject, clazz);  
        }  
        return obj;  
    }  
      
    /** 
     * 从一个JSON数组得到一个java对象数组,形如: 
     * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...] 
     * @param object 
     * @param clazz 
     * @param map 
     * @return 
     */ 
    public static Object[] getDTOArray(String jsonString, Class clazz, Map map){  
        setDataFormat2JAVA();  
        JSONArray array = JSONArray.fromObject(jsonString);  
        Object[] obj = new Object[array.size()];  
        for(int i = 0; i < array.size(); i++){  
            JSONObject jsonObject = array.getJSONObject(i);  
            obj[i] = JSONObject.toBean(jsonObject, clazz, map);  
        }  
        return obj;  
    }  
      
    /** 
     * 从一个JSON数组得到一个java对象集合 
     * @param object 
     * @param clazz 
     * @return 
     */ 
    public static List getDTOList(String jsonString, Class clazz){  
        setDataFormat2JAVA();  
        JSONArray array = JSONArray.fromObject(jsonString);  
        List list = new ArrayList();  
        for(Iterator iter = array.iterator(); iter.hasNext();){  
            JSONObject jsonObject = (JSONObject)iter.next();  
            list.add(JSONObject.toBean(jsonObject, clazz));  
        }  
        return list;  
    }  
      
    /** 
     * 从一个JSON数组得到一个java对象集合,其中对象中包含有集合属性 
     * @param object 
     * @param clazz 
     * @param map 集合属性的类型 
     * @return 
     */ 
    public static List getDTOList(String jsonString, Class clazz, Map map){  
        setDataFormat2JAVA();  
        JSONArray array = JSONArray.fromObject(jsonString);  
        List list = new ArrayList();  
        for(Iterator iter = array.iterator(); iter.hasNext();){  
            JSONObject jsonObject = (JSONObject)iter.next();  
            list.add(JSONObject.toBean(jsonObject, clazz, map));  
        }  
        return list;  
    }  
      
    /** 
     * 从json HASH表达式中获取一个map,该map支持嵌套功能 
     * 形如:{"id" : "johncon", "name" : "小强"} 
     * 注意commons-collections版本,必须包含org.apache.commons.collections.map.MultiKeyMap 
     * @param object 
     * @return 
     */ 
    public static Map getMapFromJson(String jsonString) {  
        setDataFormat2JAVA();  
        JSONObject jsonObject = JSONObject.fromObject(jsonString);  
        Map map = new HashMap();  
        for(Iterator iter = jsonObject.keys(); iter.hasNext();){  
            String key = (String)iter.next();  
            map.put(key, jsonObject.get(key));  
        }  
        return map;  
    }  
      
    /** 
     * 从json数组中得到相应java数组 
     * json形如:["123", "456"] 
     * @param jsonString 
     * @return 
     */ 
    public static Object[] getObjectArrayFromJson(String jsonString) {  
        JSONArray jsonArray = JSONArray.fromObject(jsonString);  
        return jsonArray.toArray();  
    }  
 
 
    /** 
     * 把数据对象转换成json字符串 
     * DTO对象形如:{"id" : idValue, "name" : nameValue, ...} 
     * 数组对象形如:[{}, {}, {}, ...] 
     * map对象形如:{key1 : {"id" : idValue, "name" : nameValue, ...}, key2 : {}, ...} 
     * @param object 
     * @return 
     */ 
    public static String getJSONString(Object object) throws Exception{  
        String jsonString = null;  
        //日期值处理器  
        JsonConfig jsonConfig = new JsonConfig();  
        jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());  
        if(object != null){  
            if(object instanceof Collection || object instanceof Object[]){  
                jsonString = JSONArray.fromObject(object, jsonConfig).toString();  
            }else{  
                jsonString = JSONObject.fromObject(object, jsonConfig).toString();  
            }  
        }  
        return jsonString == null ? "{}" : jsonString;  
    }  
      
    private static void setDataFormat2JAVA(){  
        //设定日期转换格式  
        JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"}));  
    }  
      
    public static void main(String[] arg) throws Exception{  
        String s = "{status : 'success'}";  
        System.out.println(" object : " + JsonUtil.getJSONString(s));  
    }  


public class JsonUtil {

/**页面传至后台时,json数据在request的参数名称*/
public final static String JSON_ATTRIBUTE = "json";
public final static String JSON_ATTRIBUTE1 = "json1";
public final static String JSON_ATTRIBUTE2 = "json2";
public final static String JSON_ATTRIBUTE3 = "json3";
public final static String JSON_ATTRIBUTE4 = "json4";

/**
  * 从一个JSON 对象字符格式中得到一个java对象,形如:
  * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...}}
  * @param object
  * @param clazz
  * @return
  */
public static Object getDTO(String jsonString, Class clazz){
  JSONObject jsonObject = null;
  try{
   setDataFormat2JAVA();
   jsonObject = JSONObject.fromObject(jsonString);
  }catch(Exception e){
   e.printStackTrace();
  }
  return JSONObject.toBean(jsonObject, clazz);
}

/**
  * 从一个JSON 对象字符格式中得到一个java对象,其中beansList是一类的集合,形如:
  * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...},
  * beansList:[{}, {}, ...]}
  * @param jsonString
  * @param clazz
  * @param map 集合属性的类型 (key : 集合属性名, value : 集合属性类型class) eg: ("beansList" : Bean.class)
  * @return
  */
public static Object getDTO(String jsonString, Class clazz, Map map){
  JSONObject jsonObject = null;
  try{
   setDataFormat2JAVA();
   jsonObject = JSONObject.fromObject(jsonString);
  }catch(Exception e){
   e.printStackTrace();
  }
  return JSONObject.toBean(jsonObject, clazz, map);
}

/**
  * 从一个JSON数组得到一个java对象数组,形如:
  * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]
  * @param object
  * @param clazz
  * @return
  */
public static Object[] getDTOArray(String jsonString, Class clazz){
  setDataFormat2JAVA();
  JSONArray array = JSONArray.fromObject(jsonString);
  Object[] obj = new Object[array.size()];
  for(int i = 0; i < array.size(); i++){
   JSONObject jsonObject = array.getJSONObject(i);
   obj[i] = JSONObject.toBean(jsonObject, clazz);
  }
  return obj;
}

/**
  * 从一个JSON数组得到一个java对象数组,形如:
  * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]
  * @param object
  * @param clazz
  * @param map
  * @return
  */
public static Object[] getDTOArray(String jsonString, Class clazz, Map map){
  setDataFormat2JAVA();
  JSONArray array = JSONArray.fromObject(jsonString);
  Object[] obj = new Object[array.size()];
  for(int i = 0; i < array.size(); i++){
   JSONObject jsonObject = array.getJSONObject(i);
   obj[i] = JSONObject.toBean(jsonObject, clazz, map);
  }
  return obj;
}

/**
  * 从一个JSON数组得到一个java对象集合
  * @param object
  * @param clazz
  * @return
  */
public static List getDTOList(String jsonString, Class clazz){
  setDataFormat2JAVA();
  JSONArray array = JSONArray.fromObject(jsonString);
  List list = new ArrayList();
  for(Iterator iter = array.iterator(); iter.hasNext();){
   JSONObject jsonObject = (JSONObject)iter.next();
   list.add(JSONObject.toBean(jsonObject, clazz));
  }
  return list;
}

/**
  * 从一个JSON数组得到一个java对象集合,其中对象中包含有集合属性
  * @param object
  * @param clazz
  * @param map 集合属性的类型
  * @return
  */
public static List getDTOList(String jsonString, Class clazz, Map map){
  setDataFormat2JAVA();
  JSONArray array = JSONArray.fromObject(jsonString);
  List list = new ArrayList();
  for(Iterator iter = array.iterator(); iter.hasNext();){
   JSONObject jsonObject = (JSONObject)iter.next();
   list.add(JSONObject.toBean(jsonObject, clazz, map));
  }
  return list;
}

/**
  * 从json HASH表达式中获取一个map,该map支持嵌套功能
  * 形如:{"id" : "johncon", "name" : "小强"}
  * 注意commons-collections版本,必须包含org.apache.commons.collections.map.MultiKeyMap
  * @param object
  * @return
  */
public static Map getMapFromJson(String jsonString) {
  setDataFormat2JAVA();
        JSONObject jsonObject = JSONObject.fromObject(jsonString);
        Map map = new HashMap();
        for(Iterator iter = jsonObject.keys(); iter.hasNext();){
            String key = (String)iter.next();
            map.put(key, jsonObject.get(key));
        }
        return map;
    }

/**
     * 从json数组中得到相应java数组
     * json形如:["123", "456"]
     * @param jsonString
     * @return
     */
    public static Object[] getObjectArrayFromJson(String jsonString) {
        JSONArray jsonArray = JSONArray.fromObject(jsonString);
        return jsonArray.toArray();
    }


/**
  * 把数据对象转换成json字符串
  * DTO对象形如:{"id" : idValue, "name" : nameValue, ...}
  * 数组对象形如:[{}, {}, {}, ...]
  * map对象形如:{key1 : {"id" : idValue, "name" : nameValue, ...}, key2 : {}, ...}
  * @param object
  * @return
  */
public static String getJSONString(Object object) throws Exception{
  String jsonString = null;
  //日期值处理器
  JsonConfig jsonConfig = new JsonConfig();
  jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());
  if(object != null){
   if(object instanceof Collection || object instanceof Object[]){
    jsonString = JSONArray.fromObject(object, jsonConfig).toString();
   }else{
    jsonString = JSONObject.fromObject(object, jsonConfig).toString();
   }
  }
  return jsonString == null ? "{}" : jsonString;
}

private static void setDataFormat2JAVA(){
  //设定日期转换格式
  JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"}));
}

public static void main(String[] arg) throws Exception{
  String s = "{status : 'success'}";
  System.out.println(" object : " + JsonUtil.getJSONString(s));
}
}

对于java对象转换成json数据格式时,要对日期格式化常用格式,类:JsonDateValueProcessor

Java代码
import java.text.SimpleDateFormat;  
import java.util.Date;  
 
import net.sf.json.JsonConfig;  
import net.sf.json.processors.JsonValueProcessor;  
 
/* 
* @author johncon 
* 创建日期 2008-9-10 
* json日期值处理器 
*/ 
public class JsonDateValueProcessor implements JsonValueProcessor {  
 
    private String format = "yyyy-MM-dd HH:mm:ss";  
 
    public JsonDateValueProcessor() {  
 
    }  
 
    public JsonDateValueProcessor(String format) {  
        this.format = format;  
    }  
 
    public Object processArrayValue(Object value, JsonConfig jsonConfig) {  
        return process(value, jsonConfig);  
    }  
 
    public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {  
        return process(value, jsonConfig);  
    }  
      
    private Object process( Object value, JsonConfig jsonConfig ) {  
        if (value instanceof Date) {  
            String str = new SimpleDateFormat(format).format((Date) value);  
            return str;  
        }  
        return value == null ? null : value.toString();  
    }  
 
    public String getFormat() {  
        return format;  
    }  
 
    public void setFormat(String format) {  
        this.format = format;  
    }  
 


import java.text.SimpleDateFormat;
import java.util.Date;

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

/*
* @author johncon
* 创建日期 2008-9-10
* json日期值处理器
*/
public class JsonDateValueProcessor implements JsonValueProcessor {

private String format = "yyyy-MM-dd HH:mm:ss";

public JsonDateValueProcessor() {

}

public JsonDateValueProcessor(String format) {
  this.format = format;
}

public Object processArrayValue(Object value, JsonConfig jsonConfig) {
  return process(value, jsonConfig);
}

public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
  return process(value, jsonConfig);
}

private Object process( Object value, JsonConfig jsonConfig ) {
  if (value instanceof Date) {
   String str = new SimpleDateFormat(format).format((Date) value);
   return str;
  }
  return value == null ? null : value.toString();
}

public String getFormat() {
  return format;
}

public void setFormat(String format) {
  this.format = format;
}

}

对于对象中有明确类型的对象属性,可不管;但对象中有集合属性的,由于类型不明确,所以要先明确类型:

Java代码
String jsonString = request.getParameter("json");  
//增加对象中的集合属性的类型以及对象元素中的对象属性的集合属性的类型  
Map clazzMap = new HashMap();  
//secondItems是FirstDTO里的集合属性  
clazzMap.put("secondItems", SecondDTO.class);  
//thirdItems是SecondDTO里的集合属性  
clazzMap.put("thirdItems", ThirdDTO.class);  
FirstDTO firstDTO = (FirstDTO)JsonUtil.getDTO(jsonString, FirstDTO.class, clazzMap);

分享到:
评论

相关推荐

    json格式与java类对象相互转换

    1. 首先,我们需要一个Java类来映射JSON数据。例如,我们有一个User类,包含id、name和email字段: ```java public class User { private int id; private String name; private String email; // 构造函数、...

    java list 转换为json数据

    java list 转换为json数据java list 转换为json数据java list 转换为json数据java list 转换为json数据java list 转换为json数据java list 转换为json数据java list 转换为json数据java list 转换为json数据java ...

    JSON与JAVA数据的相互转换

    总的来说,JSON与Java数据的相互转换是Web开发中的常见任务,理解并熟练掌握这些转换方法对于提升开发效率至关重要。开发者应根据项目需求和团队习惯选择合适的JSON处理库,并确保在处理过程中正确处理可能的异常,...

    Java组装json和java解析json数组

    附件内容为:Java组装map数据,然后转换为json数据格式;Java解析json数据

    JAVA-JSON工具转换类

    在JAVA开发中,处理JSON数据通常需要借助特定的库来完成,如本话题中提到的`json-lib`和`ezmorph`。 `json-lib`是一个Java语言实现的JSON库,它提供了多种数据类型到JSON的转换,包括JavaBean、Map、List、数组等。...

    Json与java对象之间相互转换源码

    在Java后端,我们可以通过上述方式将处理后的数据转换成JSON格式,然后传递给前端的Echarts进行渲染。 总结一下,JSON与Java对象之间的相互转换是Java开发中常见的任务。通过使用Gson或Jackson这样的库,我们可以...

    JSON与JAVA数据的转换

    而“JSON与JAVA数据的转换_files”可能是相关的辅助资源或示例代码。 总之,理解并掌握Java与JSON之间的转换是Java开发者必备的技能,这有助于更好地进行数据交互和处理。通过选择合适的库,并熟悉其API,可以在...

    json 与java之间数据的转换

    本教程将深入探讨JSON与Java之间的数据转换,包括JSON对象到Java对象以及Java对象到JSON对象的转换。 首先,为了进行JSON操作,我们需要导入相应的库。在Java中,我们以Jackson库为例,添加以下依赖到项目中: ```...

    Java bean转换为Json Schema

    Java Bean转换为Json Schema是一种常见的数据转换操作,特别是在开发基于RESTful API的Web服务时,因为JSON Schema提供了数据验证和文档化的功能。Java Bean是Java编程中的一个概念,它是一类具有特定规则的POJO...

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

    在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于服务器与客户端之间传递数据。Java作为一种常用的后端...熟练掌握JSON数据与Java对象之间的转换技巧,对提升开发效率至关重要。

    java-任何类型转换成json数据格式

    ### Java中任何类型转换成JSON数据格式 #### 一、简介 在现代Web开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java应用中,经常会遇到...

    java后台生成JSON数据

    Java 后台生成 JSON 数据是现代 Web 应用开发中的常见任务,特别是在与前端框架如 EXT 进行数据交互时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析...

    Chrom进行显示JSON数据

    在处理JSON数据时,我们依赖于库,如Jackson或Gson,它们能将Java对象转换为JSON字符串,反之亦然。理解JSON的结构和这些库的工作原理,有助于我们编写出更高效的代码。 Jackson库提供了一系列的注解,如`@...

    json转换jsonschema

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,...例如,如果你正在开发一个Web应用,你可以先将用户提交的JSON数据转换为JSON Schema,然后用它来验证后续的数据输入,防止因数据不合规导致的问题。

    Java数据格式转换成json

    ### Java 数据格式转换成 JSON 的全面解析 #### 一、JSON 概述 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,最初由 Douglas Crockford 提出。它基于 JavaScript 的语法,但独立于任何编程语言...

    Java实现json数据导入到Excel的方法

    本Java类实现了将标准的json字符串转换成map,并将数据解析到Excel的方法,本方法简单实用,可以批量导出数据到Excel文档中

    Java Json解析,Java Web Json解析,Java Web服务端获取Json数据,客户端通过HTTP获取Json数据

    对于Java Web服务端获取JSON数据,通常涉及到Servlet、JSP或Spring MVC等框架。当客户端通过HTTP请求发送JSON数据时,服务端需要解析这些数据。例如,在Servlet中,可以使用HttpServletRequest的getInputStream方法...

    java实现http请求以及解析json与java对象转换 项目源代码实例

    在Java中,处理JSON数据通常依赖于第三方库,如Jackson、Gson或org.json。这些库提供了将Java对象转换为JSON字符串,以及将JSON字符串反序列化为Java对象的功能。项目源代码可能会包含如何创建JSON对象、解析JSON...

    java调用json参数的webservice

    2. 使用诸如net.sf.json JSONObject类(一个流行的Java库,用于处理JSON数据)来将JSON格式字符串转换为JSON对象。转换后,服务端可以通过指定的键(key)来获取JSON对象中的值。 3. 在Java客户端,调用WebService...

Global site tag (gtag.js) - Google Analytics