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);

2010年8月20日 15:25

1405

0

2

44

json转java对象_json转java对象相关推荐

  1. json 解析 转java对象数组对象数组对象_json字符串转java对象数组

    需要引入json-lib-2.2-jdk15.jar和ezmorph-1.0.6.jar包 String itemStar = request.getParameter("itemStar& ...

  2. json序列化 java对象_Json 数据反序列化为Java对象

    前言:我们在项目中经常用到的是Json格式的数据,如果是将一个被Jackson转化为JSON数据格式的Java对象进行操作,我们就需要将JSON数据再反序列化为Java对象. 1.实体对象 packa ...

  3. net.sf.json在处理json对象转换为普通java实体对象时的问题和解决方案

    我使用的net.sf.json是json-lib-2.4-jdk15.jar,把json对象转换为普通java实体对象时候有个问题,josn对象转换为java对象之后,json串里面的那几个小数点的值 ...

  4. json java对象 简书_Java 对象的 Json 化与反 Json 化

    最近在家里修习 Java 这项技能,估计快点满技能点儿了,很开心.不过遇到了一个问题,困扰了我一阵子.问题是这样的,我要写 Android App,与服务器交互.大家都知道 Javascript 不知 ...

  5. java fastjson vector转为json_java对象与Json字符串之间的转化(fastjson)

    public class test { public static void main(string[] args) { // 实现java对象与json字符串之间的转化 // 1. person对象 ...

  6. json字符串转成 json对象 json对象转换成java对象

    import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; 依赖包 <dependency> ...

  7. 数据库JSON类型映射到java实体类中的对象——MyBatis框架

    简介 在使用MyBatis的过程中,会有这样的需求:POJO里有个属性是非基本数据类型,在DB存储时我们想存的是json格式的字符串,从DB拿出来时想直接映射成目标类型,也即json格式的字符串字段与 ...

  8. java json转换xml格式_在Java中将JSON对象转换为XML格式?

    JSON是一种轻量级的数据交换格式,并且JSON的格式类似于键值对.我们可以使用org.json.XML类将JSONObject转换为XML格式,这提供了将XML文本转换为JSONObject并将JS ...

  9. jsp中如何将Java对象转成js对象?

    jsp中如何将Java对象转成js对象? 1.首先我们要明确 jsp页面Java对象如何和js进行交换. 是通过jsp表达式也就<%=%>,它可以写在jsp页面的任何地方,当然可以写在Ja ...

最新文章

  1. LeetCode Intersection of Two Arrays
  2. Java Stack栈类详解
  3. HDU 2112 HDU Today (dijkstar + map)
  4. JVM学习 - 体系结构 内存模型
  5. 智慧水务建设纪实:数字可视化大屏+智能AI,凭啥这么强?
  6. 【AI视野·今日CV 计算机视觉论文速览 第232期】Thu, 8 Jul 2021
  7. Spring-beans-FactoryBean
  8. 进入windows自启文件夹
  9. 当下最强的 AI art 生成模型 Stable Diffusion 最全面介绍
  10. PHP 工具 格式化
  11. 深度信念网络python_深度信念网络python
  12. Unity GL函数库的简单使用
  13. idea如何给main函数中的args[] 字符串数组赋值
  14. scratch学习_和 Vicky 一起学习 Scratch 系列之十三 — 作曲
  15. 网页marc数据采集器(国图marc数据批量下载)
  16. fiddler拦截模拟器中app的请求设置方法
  17. 【有利可图网】PS教程:PS制作气泡黑板效果
  18. 文章4片 观察者模式
  19. cout internal
  20. Microsoft Virtual PC 2007安装XP后鼠标无法移动

热门文章

  1. python编程字典100例_python中字典(Dictionary)用法实例详解
  2. 《高性能JavaScript》第三章 DOM编程
  3. 万字长文了解免疫算法原理 及求解复杂约束问题(源码实现)
  4. wxWidgets:wxValidator概述
  5. boost::hana::make_set用法的测试程序
  6. boost::adjacency_list用法的测试程序
  7. boost::function2用法的测试程序
  8. boost::contract模块日历的测试程序
  9. boost::callable_traits移除const成员的测试程序
  10. ITK:图像重新取样