好久没有弄过反射了,今天周末,想起来复习了下!
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()+"省略。。。"); } }
相关推荐
总的来说,Java反射结合JSON解析技术,为我们提供了处理动态数据的强大手段。在实际开发中,我们应该根据具体需求权衡是否使用反射,特别是在处理大量数据或者对性能要求较高的场景下。同时,也要注意使用反射时的...
c++模板静态反射实现JSON解析
在这个场景中,"使用Gson解析json并且加载json中的网络图片"涉及到的关键技术点包括Gson库的使用、JSON解析、ListView的填充以及网络图片的加载。 首先,我们要理解Gson的工作原理。Gson通过反射机制,能够自动地将...
这个库由James Newton-King 开发,它为C#开发者提供了丰富的功能,便于序列化和反序列化JSON,使得JSON数据在.NET应用中的使用变得极其简单。 Newtonsoft.Json.dll库支持多种.NET框架版本,包括.NET Framework 2.0...
总之,Java解析JSON的jar包为开发者提供了方便的工具,帮助他们高效地处理JSON数据,无论是从服务器获取响应,还是向服务器发送请求,都能得心应手。理解并掌握这些库的使用,将极大地提高开发效率和代码质量。
总结来说,这些Java库为处理JSON数据提供了强大的工具,从解析JSON字符串到创建和操作JSON对象,再到序列化回字符串,整个过程都得到了很好的支持。它们的结合使用大大简化了开发人员的工作,提高了开发效率。
它提供了解析JSON字符串为Java对象,以及将Java对象转换为JSON字符串的功能。Fastjson的特性包括高速度、低内存消耗和简单的API。此外,它还支持JSON Schema验证,以及直接映射Java反射机制,使得JSON与Java对象之间...
我们将以一个名为`JsonUtils`的Java类为例,该类可能包含实现此功能的方法。 首先,我们需要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在C++中,将类序列化为JSON意味着将类的实例数据转换为JSON字符串,以便于存储、传输或与其他系统...
首先,**序列化** 是一个过程,它将对象转换为字节流,以便可以将其保存到磁盘、数据库,或者在网络上传输。在C#中,我们可以使用`System.Runtime.Serialization.Formatters.Binary.BinaryFormatter`类进行二进制...
本话题将深入探讨如何利用Java反射机制将List对象转换为JSON格式。 在Java中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在处理数据传输或存储...
在Java中,解析JSON的基本思路是将JSON字符串转化为JSON对象,然后通过键值对的方式获取数据。例如,我们可以创建一个名为`parseJson`的方法,它接受一个JSON字符串作为参数,使用`org.json`库(如果没有提供,我们...
用于json解析万能工具类,只需传入jsonString以及数据模板类,可以返回对应的对象或list对象
它可以逐个解析JSON对象的键值对,提供诸如`ReadBoolean()`, `ReadDouble()`, `ReadString()`等方法,帮助开发者提取所需的信息。 2. **JsonWriter**:与JsonReader相反,JsonWriter用于将C#对象写入JSON字符串。...
本文将深入探讨FastJson解析Json数据的源码,帮助开发者理解其内部工作机制,提升对JSON处理的效率。 FastJson的核心功能是将Java对象转换为JSON字符串,以及将JSON字符串反序列化为Java对象。它提供了丰富的API...
`data`文件夹可能包含了BIM模型的JSON数据,而`js`文件夹则可能包含自定义的JavaScript代码,如加载和解析JSON数据的函数,以及控制交互的逻辑。 总的来说,Three.js解析BIM中间数据JSON的过程涉及了3D建模、数据...
以Jackson为例,`ObjectMapper`类提供了`readValue()`和`writeValueAsString()`方法来实现这两个过程。前者接收一个JSON字符串和目标类型,返回对应的Java对象;后者接收一个Java对象,返回它的JSON表示。 在实际...
在这个场景中,我们关注的是一个名为“java解析json最新jar包”的资源,其版本为2014.2.25,这表明它可能包含了一个或多个Java库,用于处理JSON。 提供的压缩包中包含了多个jar文件,这些文件通常包含了Java类和...
对于"java反射实现Object转json"这个主题,我们将深入探讨如何使用反射机制将Java对象转换为JSON格式的数据。 首先,理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...
C/C++解析JSON Exjson**是一款高性能的基于Flex & Bison的 **JSON** 解析器,**Xserver**引擎自带 **Exjson** 解析器,其他需要使用的只需要引入几个头文件和源文件即可