`

json转换

    博客分类:
  • Java
 
阅读更多

j1、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转换为SQL server建表脚本

    标题"json转换为SQL server建表脚本"涉及到的主要知识点包括: 1. JSON解析:首先,你需要理解如何在C#中解析JSON数据。C#提供了 Newtonsoft.Json 库(也称为 Json.NET),这是一个强大的JSON库,可以方便地将JSON...

    xml & json 转换工具

    在XML到JSON转换过程中,XStream可能首先用于将XML数据转换为Java对象,然后这些对象再由Json-lib处理成JSON格式。 XML到JSON的转换通常包括以下步骤: - 解析XML文档,将其转换为DOM(Document Object Model)树。...

    json转换jar包

    标题"json转换jar包"暗示了我们需要一个包含这些JSON处理库的JAR文件,以便在Java项目中进行JSON操作。这些库通常以JAR格式提供,便于集成到Java项目的类路径中。 描述提到"string与json转换需要的jar包",这表明...

    json转换jsonschema

    在JavaScript开发中,有时我们需要将JSON对象转换为JSON Schema,以便对数据进行验证。这在处理用户输入、API交互或者存储复杂数据结构时非常有用。`jsonToSchema`项目可能就是一个工具或库,用于帮助开发者实现这个...

    python:json转换

    而`trans-json2.py`则可能涉及到两种不同风格的JSON转换。其中一种可能是"pretty-print"风格,即格式化后的JSON,易于人类阅读,通过设置`indent`参数实现: ```python import json # JSON字符串 json_str = '{...

    JSON转换为JAVA对象及日期格式转换处理 -

    JSON转换为JAVA对象及日期格式转换处理 -

    Java中后台JSON转换包

    Java中的JSON转换是Web开发中常见的一种数据交互方式,它使得服务器端的数据能以轻量级的文本格式发送到客户端,比如JavaScript,从而方便前端进行处理。本篇将详细讲解如何在Java后台上使用JSON进行数据转换,并...

    json 转换为map

    在Java中,将JSON转换为Map是常见的操作,因为Map可以方便地与Java对象进行映射,便于进一步处理。`google-gson`库是Google提供的一个Java库,用于将Java对象转换为JSON格式,反之亦然。 在Java中,`java.util.Map`...

    gson 2.3.1 json转换利器

    本篇文章将深入探讨Gson 2.3.1的核心功能、使用方法以及它在JSON转换中的优势。 一、Gson简介 Gson库的主要目的是解决Java对象与JSON字符串之间的相互转换问题。JSON(JavaScript Object Notation)是一种轻量级的...

    andriod之json转换工具jar包

    这里提到的"andriod之json转换工具jar包"是一个专门为Android平台设计的JSON处理库,帮助开发者快速地将Java对象转换为JSON格式,反之亦然。 该jar包包含了两个关键组件: 1. `jackson-mapper-asl-1.9.11.jar`:这...

    json转换插件

    在Java开发中,处理JSON数据时,我们经常需要将JSON字符串与Java对象之间进行相互转换,这正是"json转换插件"所扮演的角色。 这个插件的核心功能是提供了一个桥梁,连接JavaScript提交的JSON字符串和Java世界中的...

    json转换工具

    JSON转换工具主要用于将JSON格式的数据转换为其他格式,或者将其他格式的数据转换成JSON,以适应不同的数据交互需求。 在你提供的压缩包文件中,包含了一些Java库,这些库是用于处理JSON转换和其他相关操作的。下面...

    JSON 转换工具

    本文将详细介绍如何使用JSON转换工具,包括将JSON字符串转换为Objective-C的JsonModel和Swift的HandyJSON,以及JsonModel到HandyJSON的转换。 首先,让我们了解一下JsonModel。JsonModel是Objective-C的一个库,它...

    C#平台JSON转换工具

    本篇将详细介绍"C#平台JSON转换工具"的相关知识点。 1. JSON与C#的结合: C#提供了System.Json命名空间(在.NET Framework 3.5 SP1及更高版本中引入)来处理JSON,但这个API在.NET Framework 4.0中已被弃用。...

    Json转换程序

    本篇文章将聚焦于“Json转换程序”,详细介绍JSON序列化与反序列化的过程,以及如何在实际项目中处理JSON格式数据。 **JSON序列化**是指将编程语言中的对象转换成JSON字符串,以便在网络中传输或存储。例如,在Java...

    json转换工具类

    json转换工具类,可以转换很多格式。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    Json 转换工具类

    描述中提到的"在开发过程中总是遇到需要类似的工具类,但是没有好用的",这反映出JSON转换在实际开发中的常见需求,以及`Newtonsoft.Json`在满足这些需求时的高效性和易用性。通过这个工具类,开发者可以避免手动...

    js json转换器.zip_1UX_1VX_json转换器

    "js json转换器"是一个工具,其主要功能是将其他数据类型转换为JSON格式,以便于数据的存储、传输或处理。 "1ux 1vx_json转换器"标签可能是这个应用的特定版本或者特色标识,但没有提供足够的信息来详细解释其含义...

Global site tag (gtag.js) - Google Analytics