好久没有弄过反射了,今天周末,想起来复习了下!
Person实体类
package com.masque.json; import java.util.Date; /** * * @title: 实体信息 * @description: json对应封装的实体 * @className: Person.java * @author: masque * @createDate: 2013-7-27 * @version: 1.0 */ public class Person { private String name; private Date birthday; private Short sex; private Boolean isMarry; private Double high; private Float weight; public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Short getSex() { return sex; } public void setSex(Short sex) { this.sex = sex; } public Boolean getIsMarry() { return isMarry; } public void setIsMarry(Boolean isMarry) { this.isMarry = isMarry; } public Double getHigh() { return high; } public void setHigh(Double high) { this.high = high; } public Float getWeight() { return weight; } public void setWeight(Float weight) { this.weight = weight; } }
解析过程
package com.masque.json; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * * @title: 反射 * @description: 用来解析json并封装数据 * @className: ObjToObj.java * @createDate: 2013-7-27 * @version: 1.0 */ public class ObjToObj { @SuppressWarnings("all") public static void main(String[] args) { //实体对应的字符串形式 String personStr = "{'name':'xiao','birthday':'1989-02-22','sex':'1','isMarry':'false','high':'165.5','weight':'60.55'}"; int flag = 1; //想将字符串解析成Map Map<String,String> inMap = new HashMap<String, String>(); while(flag!=-1){ flag = personStr.indexOf("','"); if(flag==-1) continue; String pro = personStr.substring(1,flag+1); personStr = personStr.substring(flag+2); String [] pp = pro.replaceAll("'", "").split(":"); inMap.put(pp[0], pp[1]); } Iterator<String> it = inMap.keySet().iterator(); Class obj=null; Object a = null; try { obj = Class.forName("com.masque.json.Person");//反射得到类 a = obj.newInstance();//实例化对象 while (it.hasNext()) { String key = it.next(); Method[] methods = obj.getMethods();//得到所有方法的对象数组 String m = key.substring(0,1).toUpperCase()+key.substring(1); for (int i = 0; i < methods.length; i++) { if(methods[i].getName().equals("get"+m)){//get方法才有返回值! //得到返回值类型 String returnType = methods[i].getReturnType().getSimpleName(); System.out.println(returnType); Method method = null; //通过判断属性的类型来转换到对应的对象 if(returnType.equals("Date")){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); method = obj.getDeclaredMethod("set"+m, Date.class); method.invoke(a,format.parse(inMap.get(key))); } if(returnType.equals("Short")){ method = obj.getDeclaredMethod("set"+m, Short.class); method.invoke(a,Short.parseShort(inMap.get(key))); } if(returnType.equals("Boolean")){ method = obj.getDeclaredMethod("set"+m, Boolean.class); method.invoke(a,Boolean.parseBoolean(inMap.get(key))); } if(returnType.equals("Double")){ method = obj.getDeclaredMethod("set"+m, Double.class); method.invoke(a,Double.parseDouble(inMap.get(key))); } if(returnType.equals("Float")){ method = obj.getDeclaredMethod("set"+m, Float.class); method.invoke(a,Float.parseFloat(inMap.get(key))); } if(returnType.equals("String")){ method = obj.getDeclaredMethod("set"+m, String.class); method.invoke(a,inMap.get(key)); } } } } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); }catch (ClassNotFoundException e) { e.printStackTrace(); }catch (InstantiationException e) { e.printStackTrace(); } System.out.println(((Person)a).getName()+"省略。。。"); } }
相关推荐
用于json解析万能工具类,只需传入jsonString以及数据模板类,可以返回对应的对象或list对象
里面做了几个案例,供为参考。感觉也挺有用
NULL 博文链接:https://admin-king.iteye.com/blog/2309271
利用java反射机制实现的json与java对象互相转化的工具,只暴露了两个空开的接口,其他接口都是私有的。
Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把Java对象(JavaBean)序列化为json格式字符串,将json格式字符串序列化为相对应的Java对象(JavaBean)。项目地址:...
在 Android 应用程序中,您可以看到如何以自然的方式解析 JSON,这意味着没有任何库支持或反射。 该应用程序提供了主视图,其中有一个带有下载字符的 ListView(在这种情况下只有一个;请参阅未来工作)。 为了解析...
验证与和不同的已解析JSON。 可以使用Value.Get(...).MarshalTo快速提取原始JSON的一部分,并使用和函数对其进行修改。 可以解析包含具有不同类型(又称为非同质类型)的值的数组。 例如, fastjson可以轻松解析...
科 文件 矩阵 模糊测试 --- Boost.JSON 总览 Boost.JSON是一个可移植的C ++库,提供实现或简称“ JSON”(轻量... 该库着重于一个常见且流行的用例:在一个名为value的容器中进行解析和序列化,该容器保存JSON类型。
Unity3d json库 ios上无错,库里没有用到反射
使用Codable将JSON响应数据转换为swift对象的Alamofire扩展
特性:支持反射指定json路径关键字来解析指定的jsonjson对象 嵌入:支持json或模型类的无限嵌套,json-> model,model-> json的转换 附加:支持模型对象重构解档以及复制操作 咨询:712641411 作者:吴海超 性能测试...
JsonLube用于将Json对象转成JAVA Bean对象,不同于传统在运行时进行反射的方式,JsonLube采用在编译时自动生成解析Json的代码,使用方式依然简单,然而在移动平台上却可以收获更好的性能。
JsonReader :解析JSON并构建JsonValue对象的DOM。 JsonValue :描述JSON对象,数组,字符串,float,long,boolean或null。 Json :使用JsonReader和JsonWriter读写任意对象图。 编写对象图 Json类使用反射将...
NET 5.0+)或NuGet包(除.NET Framework 4.5.2以外的所有其他平台)上都可以使用System.Text.Json平台上,它可以作为System.Text.Json.Utf8JsonReader和System.Text.Json.Utf8Jsonwriter包装器,为常见的JSON解析和...
基于Java的XML解析与反射设计模式 摘要:随着计算机时代的蓬勃发展,internet的普及给社会以及人民的生活带来了巨 大的影响。与此同时,b/s结构的多系统相互访问技术应时代的发展也如雨后春笋般不断 涌现出来,相应...
JsonLube用于将Json对象转成JAVA Bean对象,不同于传统在运行时进行反射的方式,JsonLube采用在编译时自动生成解析Json的代码,使用方式依然简单,然而在移动平台上却可以收获更好的性能。 使用方式 gradle配置 ...
没有手动的JSON转换,反射和手动的错误处理:只有带有注释的服务接口。 即使这样也不是必需的:如果您喜欢构建器,则客户端上会有流利的API。 该库是一个可编译的JSON-RPC 2.0协议实现,因此它应处理所有类型的JSON...
从爱邦公交api获得较为复杂的json 然后自动解析成对象。
用于解析FQCN的PHP解析器默认使用反射可重用的代码即配置通过子类型解析器支持多态子树分辨率的级联配置选项类型安全性: Psalm将知道JsonMapper::map(_list(_class(User::class)), ...)返回list<User> 。...
它极大地简化了将JSON解析为模型对象的冗长而繁琐的过程。 它通过利用反射来做到这一点。 不幸的是,使用反射可能会很慢(尤其是在Android OS上)。 您可以编写一个自定义的TypeAdapter(Gson用来