JSONObjectJSONArrayMapJavaBean的相互转换

Posted starskyhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSONObjectJSONArrayMapJavaBean的相互转换相关的知识,希望对你有一定的参考价值。

1,JSONObject

  json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value}

2,JSONArray

  json数组,使用中括号[ ],只不过数组里面的项也是json键值对格式的

  Json对象中添加的是键值对,JSONArray中添加的是Json对象

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.junit.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

public class JsonTest {

    public static void main(String[] args) {
        //----------------JsonObject创建的方法-----------------------------------------------------------
        //创建JsonObject第一种方法
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("UserName", "kobi");
        jsonObject.put("age", "34");
        jsonObject.put("workIn", "ALI");//此处的"ALI"也可以替换为一个json{"sex":"男","station":"徐州","hoobey":"coding"}
        // System.out.println("jsonObject1:" + jsonObject);//jsonObject1:{"UserName":"kobi","workIn":"ALI","age":"34"}
        Iterator iterator = jsonObject.keys();//用Iterator迭代器遍历取值,建议用反射机制解析到封装好的对象中
        while (iterator.hasNext()) {
            String key = (String) iterator.next();
            String value = jsonObject.getString(key);
            System.out.println(value);//输出值   kobi ALI 34
        }
        //创建JsonObject第二种方法
        HashMap<String, String> hashMap = new HashMap<String, String>();
        hashMap.put("UserName", "ZHULI");
        hashMap.put("age", "30");
        hashMap.put("workIn", "ALI");
        // System.out.println("jsonObject2:" + JSONObject.fromObject(hashMap));//jsonObject2:{"UserName":"ZHULI","workIn":"ALI","age":"30"}


        //----------------JSONArray创建的方法-----------------------------------------------------------
        //一:遍历JsonArray
        String str = "[{name:‘a‘,value:‘aa‘},{name:‘b‘,value:‘bb‘},{name:‘c‘,value:‘cc‘},{name:‘d‘,value:‘dd‘}]";  // 一个未转化的字符串
        JSONArray json = JSONArray.fromObject(str); // 首先把字符串转成 JSONArray  对象
        if (json.length() > 0) {
            for (int i = 0; i < json.length(); i++) {
                JSONObject job = json.getJSONObject(i);  // 遍历 jsonarray 数组,把每一个对象转成 json 对象
                // System.out.println(job);//{"name":"a","value":"aa"}  {"name":"b","value":"bb"} {"name":"c","value":"cc"}.....
                //  System.out.println(job.get("name"));  // a b c d

            }
        }

        //创建JsonArray方法2
        ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("kobi");
        arrayList.add("34");
        arrayList.add("ALI");
        //System.out.println("jsonArray2:" + JSONArray.fromObject(arrayList));//jsonArray2:["kobi","34","ALI"]


    }

    @Test
    public void test0105() {
        /*
取出name4值过程步骤:  1.将以上字符串转成JSONArray对象  2.取出对象的第一项,JSONObject 3.取出name1的值JSONObject
                      4.然后取出name2的值JSONObject对象  5.取出name4的值value2
* */
        /*  记住":"前是键,符号后是值  大括号成对找  一层层拨开就清楚了*/
        String str = "[{name1:{name2:{name3:‘value1‘,name4:‘value2‘}}},{}]";

        JSONArray jsonArray = JSONArray.fromObject(str);//  将结果转成JSONArray对象的形式

        JSONObject getJsonObj = jsonArray.getJSONObject(0);//获取json数组中的第一项

        JSONObject json = getJsonObj.getJSONObject("name1").getJSONObject("name2");//{"name4":"value2","name3":"value1"}
        Object value = json.get("name4");
        System.out.println(value);//value2
    }

    @Test
    public void test01051() {
        JSONObject json = new JSONObject();
        JSONArray jsonArray = new JSONArray();

        json.put("key", "value");//JSONObject对象中添加键值对
        jsonArray.put(json);//将JSONObject对象添加到Json数组中


        System.out.println(json);
        System.out.println(jsonArray);
    }

}

相互转换的方法如下,可以运用到日常的工作中去:

package com.suning.crawler.util;

import net.sf.json.JSONObject;
import sun.security.util.Password;

import java.lang.reflect.Method;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * @Author: hoobey
 * @Description:
 * @Date: Created in 9:12 2018/1/6
 * @Modified By:
 * *转换器
 * 1:将JavaBean 转换成Map、JSONObject
 * 2:将JSONObject 转换成Map
 */
public class BeanConverter {
    /**
     * 将javaBean转换成Map
     *
     * @param javaBean javaBean
     * @return Map对象
     */
    public static Map<String, String> BeantoMap(Object javaBean) {
        Map<String, String> result = new HashMap<String, String>();
        Method[] methods = javaBean.getClass().getDeclaredMethods();

        for (Method method : methods) {
            try {
                if (method.getName().startsWith("get")) {
                    String field = method.getName();//getName  getPassword
                    field = field.substring(field.indexOf("get") + 3);//Name  Password
                    field = field.toLowerCase().charAt(0) + field.substring(1);//name password
                    Object value = method.invoke(javaBean, (Object[]) null);
                    result.put(field, null == value ? "" : value.toString());
                }
            } catch (Exception e) {
            }
        }

        return result;
    }

    /**
     * 将json对象转换成Map
     *
     * @param jsonObject json对象
     * @return Map对象
     */
    @SuppressWarnings("unchecked")
    public static Map<String, String> JsontoMap(JSONObject jsonObject) {
        Map<String, String> result = new HashMap<String, String>();
        Iterator<String> iterator = jsonObject.keys();
        String key = null;
        String value = null;
        while (iterator.hasNext()) {
            key = iterator.next();
            value = jsonObject.getString(key);
            result.put(key, value);
        }
        return result;
    }

    /**
     * 将javaBean转换成JSONObject
     *
     * @param bean javaBean
     * @return json对象
     */
    public static JSONObject toJSON(Object bean) {
        return new JSONObject(BeantoMap(bean));
    }

    /**
     * 将map转换成Javabean
     *
     * @param javabean javaBean
     * @param data     map数据
     */
    public static Object toJavaBean(Object javabean, Map<String, String> data) {
        Method[] methods = javabean.getClass().getDeclaredMethods();
        for (Method method : methods) {
            try {
                if (method.getName().startsWith("set")) {
                    String field = method.getName(); //setName   setPassword
                    field = field.substring(field.indexOf("set") + 3);//Name  Password
                    field = field.toLowerCase().charAt(0) + field.substring(1);//name  password
                    method.invoke(javabean, new Object[]
                            {
                                    data.get(field)
                            });
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return javabean;
    }

    /**
     * 将javaBean转换成JSONObject
     *
     * @param data javaBean
     * @return json对象
     * @throws ParseException json解析异常
     */
    public static void toJavaBean(Object javabean, String data) throws ParseException {
        JSONObject jsonObject = new JSONObject(data);
        Map<String, String> datas = BeantoMap(jsonObject);
        toJavaBean(javabean, datas);
    }
}

方法调用:

package com.suning.crawler.util;
import net.sf.json.JSONObject;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @Author: hoobey
 * @Description:
 * @Date: Created in 9:16 2018/1/6
 * @Modified By:
 */
public class Test0106 {
    /*javaBean转换成Map*/
    @Test
    public void test1(){
        Map<String, String> map = BeanConverter.BeantoMap(new Stu("hoobey","123"));
       // Map<String, String> map = BeanConverter.toMap(new Stu("hoobey", "213"));
      //  Set<Map.Entry<String, String>> entry = map.entrySet(); //Set集合中存储的是Map.Entry<String, String> entry
        //推荐使用这种map遍历 尤其是容量大的时候  map.entrySet()返回此映射中包含的映射关系的 Set视图
        for(Map.Entry<String, String> entry : map.entrySet()){
            System.out.println("key="+entry.getKey()+",value="+entry.getValue());
        }
    }

    /*  * 将json对象转换成Map*/
    @Test
    public void test2(){

        JSONObject json =new JSONObject();
        json.put("hoobey","123");          //{"hoobey":"123"}
        Map<String, String> toMap = BeanConverter.JsontoMap(json);
        for(Map.Entry<String, String> entry : toMap.entrySet()){
            System.out.println("key="+entry.getKey()+",value="+entry.getValue());
        }
    }

    /*将javaBean转换成JSONObject*/
    @Test
    public void test3(){
        JSONObject toJSON = BeanConverter.toJSON(new Stu("hoobey", "123"));
        System.out.println(toJSON);//{"password":"123","name":"hoobey"}
    }

    /*将map转换成Javabean   map中存放的键值一定和bean相对应*/
    @Test
    public void test4(){
        Map<String, String> map = new HashMap<String, String>();
        map.put("name","hoobey");
        map.put("password","123");
        Object o = BeanConverter.toJavaBean(new Stu(), map);
        System.out.println(o);//Stu{name=‘hoobey‘, password=‘123‘}
    }
}

 

以上是关于JSONObjectJSONArrayMapJavaBean的相互转换的主要内容,如果未能解决你的问题,请参考以下文章