javaBean 轉json指定key-value個數

小弟面試碰到一個比計較噁心的要求,就是一個javaBean 可能有10個屬性,轉成json後通常也會有10個鍵值對,無論是否是null都會存在。現要求 轉成json後 只能有3個有值的屬性。怎麼搞?java

我想到的就是反射面試

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<TestClass> cl = (Class<TestClass>) testClass.getClass();
        Field[] fields = cl.getDeclaredFields();
        System.out.println(fields.length);
        //來一個map 用於轉換成json用
        Map<String,String> key_value = new HashMap<String,String>();

        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;
    }
}

其,主要思路就是:json

獲取bean 的class對象,而後獲取到全部的屬性。this

根據get方法的命名規則,使用Field對象的getName方法拼接處get方法的名稱。code

根據class對象和 get方法的名稱 獲取到對應get方法的method方法對象,調用該method方法的invoke方法執行get方法,獲取指定field的值對象

封裝到map中,轉成json便可。get

 

若是要想隨機將指定個數的屬性封裝成json,那麼就要在遍歷Fields時,就要隨機取,在取出對應的value便可。string

相關文章
相關標籤/搜索