`

【反射】解析json 为例

 
阅读更多

好久没有弄过反射了,今天周末,想起来复习了下!

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字符串转成对象.zip

    总的来说,Java反射结合JSON解析技术,为我们提供了处理动态数据的强大手段。在实际开发中,我们应该根据具体需求权衡是否使用反射,特别是在处理大量数据或者对性能要求较高的场景下。同时,也要注意使用反射时的...

    c++模板静态反射实现JSON解析

    c++模板静态反射实现JSON解析

    使用Gson解析json并且加载json中的网络图片

    在这个场景中,"使用Gson解析json并且加载json中的网络图片"涉及到的关键技术点包括Gson库的使用、JSON解析、ListView的填充以及网络图片的加载。 首先,我们要理解Gson的工作原理。Gson通过反射机制,能够自动地将...

    C#解析json的Newtonsoft.Json.dll各种.net版本

    这个库由James Newton-King 开发,它为C#开发者提供了丰富的功能,便于序列化和反序列化JSON,使得JSON数据在.NET应用中的使用变得极其简单。 Newtonsoft.Json.dll库支持多种.NET框架版本,包括.NET Framework 2.0...

    java解析json的jar包

    总之,Java解析JSON的jar包为开发者提供了方便的工具,帮助他们高效地处理JSON数据,无论是从服务器获取响应,还是向服务器发送请求,都能得心应手。理解并掌握这些库的使用,将极大地提高开发效率和代码质量。

    json 数据解析包

    总结来说,这些Java库为处理JSON数据提供了强大的工具,从解析JSON字符串到创建和操作JSON对象,再到序列化回字符串,整个过程都得到了很好的支持。它们的结合使用大大简化了开发人员的工作,提高了开发效率。

    xml解析和json解析.zip

    它提供了解析JSON字符串为Java对象,以及将Java对象转换为JSON字符串的功能。Fastjson的特性包括高速度、低内存消耗和简单的API。此外,它还支持JSON Schema验证,以及直接映射Java反射机制,使得JSON与Java对象之间...

    利用反射实现对象转json格式字符串

    我们将以一个名为`JsonUtils`的Java类为例,该类可能包含实现此功能的方法。 首先,我们需要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在...

    c++反射 类序列化为json

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在C++中,将类序列化为JSON意味着将类的实例数据转换为JSON字符串,以便于存储、传输或与其他系统...

    序列化与反射

    首先,**序列化** 是一个过程,它将对象转换为字节流,以便可以将其保存到磁盘、数据库,或者在网络上传输。在C#中,我们可以使用`System.Runtime.Serialization.Formatters.Binary.BinaryFormatter`类进行二进制...

    Java反射函数机制实现List转换Json

    本话题将深入探讨如何利用Java反射机制将List对象转换为JSON格式。 在Java中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在处理数据传输或存储...

    一种简单的json解析方法

    在Java中,解析JSON的基本思路是将JSON字符串转化为JSON对象,然后通过键值对的方式获取数据。例如,我们可以创建一个名为`parseJson`的方法,它接受一个JSON字符串作为参数,使用`org.json`库(如果没有提供,我们...

    json解析万能工具类

    用于json解析万能工具类,只需传入jsonString以及数据模板类,可以返回对应的对象或list对象

    Unity解析JSON的插件LitJson.zip

    它可以逐个解析JSON对象的键值对,提供诸如`ReadBoolean()`, `ReadDouble()`, `ReadString()`等方法,帮助开发者提取所需的信息。 2. **JsonWriter**:与JsonReader相反,JsonWriter用于将C#对象写入JSON字符串。...

    FastJson解析Json数据源码-旧版

    本文将深入探讨FastJson解析Json数据的源码,帮助开发者理解其内部工作机制,提升对JSON处理的效率。 FastJson的核心功能是将Java对象转换为JSON字符串,以及将JSON字符串反序列化为Java对象。它提供了丰富的API...

    three.js解析BIM中间数据JSON(源代码)

    `data`文件夹可能包含了BIM模型的JSON数据,而`js`文件夹则可能包含自定义的JavaScript代码,如加载和解析JSON数据的函数,以及控制交互的逻辑。 总的来说,Three.js解析BIM中间数据JSON的过程涉及了3D建模、数据...

    实体类反射非空赋值,AjaxJson工具类

    以Jackson为例,`ObjectMapper`类提供了`readValue()`和`writeValueAsString()`方法来实现这两个过程。前者接收一个JSON字符串和目标类型,返回对应的Java对象;后者接收一个Java对象,返回它的JSON表示。 在实际...

    java解析json最新jar包-2014.2.25

    在这个场景中,我们关注的是一个名为“java解析json最新jar包”的资源,其版本为2014.2.25,这表明它可能包含了一个或多个Java库,用于处理JSON。 提供的压缩包中包含了多个jar文件,这些文件通常包含了Java类和...

    java反射实现Object转json

    对于"java反射实现Object转json"这个主题,我们将深入探讨如何使用反射机制将Java对象转换为JSON格式的数据。 首先,理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...

    JSON解析库,C/C++实现,很强大

    C/C++解析JSON Exjson**是一款高性能的基于Flex & Bison的 **JSON** 解析器,**Xserver**引擎自带 **Exjson** 解析器,其他需要使用的只需要引入几个头文件和源文件即可

Global site tag (gtag.js) - Google Analytics