mysql json javabean_javaBean 转json指定key-value个数

小弟面试碰到一个比计较恶心的要求,就是一个javaBean 可能有10个属性,转成json后一般也会有10个键值对,不管是不是null都会存在。现要求 转成json后 只能有3个有值的属性。怎么搞?

我想到的就是反射

package com.wisely;

import net.sf.json.JSONObject;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.HashMap;

import java.util.Map;

/**

* DES: 将非null 的属性,转成json null的属性,在json中看不到

* Created by Reynole-白

* Date: 2017/8/29 16:37

*/

public class TestClass {

private String name;

private String sex;

private int age;

private String adress;

public String getAdress() {

return adress;

}

public void setAdress(String adress) {

this.adress = adress;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String sysMsg(){

return "我是sysMsg方法";

}

public static void main(String[] args) throws Exception {

TestClass testClass = new TestClass();

testClass.setName("i am TestClass class");

testClass.setAge(10);

testClass.setSex("girl");

Class cl = (Class) testClass.getClass();

Field[] fields = cl.getDeclaredFields();

System.out.println(fields.length);

//来一个map 用于转换成json用

Map key_value = new HashMap();

for(Field field : fields){

Object object = getValueByFieldName(field.getName(),testClass);

if(null != object){

System.out.println(object.toString());

//将key-value 添加到map

key_value.put(field.getName(),object.toString());

}

}

JSONObject json = JSONObject.fromObject(key_value);

System.out.println(json.toString());

}

public static Object getValueByFieldName(String fieldName,Object object) throws Exception {

//一般get方法属性名开头字母都大写

String firstLetter = fieldName.substring(0, 1).toUpperCase();

//拼接成getter方法名

String getter = "get" + firstLetter + fieldName.substring(1);

//获取对应get方法下面两个方法使用哪个都行

Method method = object.getClass().getMethod(getter,null);

// Method method = object.getClass().getMethod(getter,new Class[]{});

//执行该get方法,后面的参数给一个空就行

Object value = method.invoke(object,null);

// method.invoke(object,new Object[]{});

return value;

}

}

其,主要思路就是:

获取bean 的class对象,然后获取到所有的属性。

根据get方法的命名规则,使用Field对象的getName方法拼接处get方法的名称。

根据class对象和 get方法的名称 获取到对应get方法的method方法对象,调用该method方法的invoke方法执行get方法,获取指定field的值

封装到map中,转成json即可。

如果要想随机将指定个数的属性封装成json,那么就要在遍历Fields时,就要随机取,在取出对应的value即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值