将json字符串转换为对象 博客分类: java编程
程序员文章站
2024-03-06 19:33:02
...
准备将这几年的工作进行一个系统的总结,会陆续发些东西出来供大家参考。
本文向大家介绍的是一个将json字符串直接转换为对象的方法,这个方法对于处理json字符串有很大的帮助。废话少说,上代码:
代码已经过测试,支持String、int、list等常见类型。而json的解析我这里用的是JSONReader,依赖的jar包见附件。
本文向大家介绍的是一个将json字符串直接转换为对象的方法,这个方法对于处理json字符串有很大的帮助。废话少说,上代码:
package com.cp.utils; /** * 作者:chenpeng * E-mail:46731706@qq.com * 创建时间:2012-7-12 下午02:29:57 * 类说明 */ public class User { private int userId; private String userName; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
package com.cp.utils; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Map; import org.stringtree.json.JSONReader; /** * 作者:chenpeng * E-mail:46731706@qq.com * 创建时间:2012-7-12 下午02:16:26 * 类说明 */ public class TestUtils { public static void main(String[] args){ String data="{\"userId\":1,\"username\":\"cp\"}"; try { jsonDataToObj("com.cp.utils.User", data); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @SuppressWarnings("unchecked") public static Object jsonDataToObj(String type, String data) throws Exception { Class classType = Class.forName(type); Object object = classType.newInstance(); // 获得对象的所有属性 Field[] fields = classType.getDeclaredFields(); JSONReader reader = new JSONReader(); Map jsonData = null; jsonData = (Map) reader.read(data); int f_size = fields.length; for (int i = 0; i < f_size; i++) {// 获取数组中对应的属性 Field field = fields[i]; String fieldName = field.getName(); if(!jsonData.containsKey(fieldName)){ continue; } String stringLetter = fieldName.substring(0, 1).toUpperCase(); // 获得相应属性的setXXX方法名称 String setName = "set" + stringLetter + fieldName.substring(1); // 获取相应的方法 Method setMethod = classType.getMethod(setName, new Class[] { field.getType() }); // 调用拷贝对象的setXXX()方法 if (jsonData.containsKey(fieldName) && (jsonData.get(fieldName)) != null && jsonData.get(fieldName).toString().trim().length() > 0) { //对象的声明类型 Type tp = field.getType(); if (tp.toString().equals("interface java.util.List")) { ArrayList<String> list = new ArrayList<String>(); list.add((String) jsonData.get(fieldName)); setMethod.invoke(object, new Object[] { list }); } else if (tp.toString().indexOf("[Ljava.lang.String;") != -1) { String tmp = (String) jsonData.get(fieldName); String[] str = tmp.split(","); setMethod.invoke(object, new Object[] { str }); }else if (tp.toString().indexOf("int") != -1){ setMethod.invoke(object, new Object[] { ((Long)jsonData.get(fieldName)).intValue() }); } else { setMethod.invoke(object, new Object[] { jsonData.get(fieldName) }); } } } return object; } }
代码已经过测试,支持String、int、list等常见类型。而json的解析我这里用的是JSONReader,依赖的jar包见附件。
推荐阅读
-
将json字符串转换为对象 博客分类: java编程
-
php 把对象转化为json 博客分类: php 转为json对象转jsonobject to json对象转换为jsonyii转化json
-
JSON字符串转换为对象 博客分类: Java jsonjava
-
JSON字符串转换为对象 博客分类: Java jsonjava
-
如何将Java对象转换为JSON字符串
-
用 ObjectMapper将JSON字符串转换为java对象时,java对象一定要有无参构造函数 jsonObjectMapperjava
-
用 ObjectMapper将JSON字符串转换为java对象时,java对象一定要有无参构造函数 jsonObjectMapperjava