JSON格式的字符串轉換爲java對象

package cn.itcast.caoke.json;java

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;json

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

public class Json2Java {
    
    /*
     * 類中包含類的寫法
     * caoke===24----cn.itcast.caoke.json.Student@3abc8e1e
     * caoke2===12
     * liyong===28----cn.itcast.caoke.json.Student@311671b2
     * liyong2===19
     */
    @Test
    public void json2beanTest(){
        //建立一個json字符串
        String strJson = "[{\"name\":\"caoke\",\"age\":\"24\",\"student\":{\"name\":\"caoke2\",\"age\":\"12\"}}," +
                "{\"name\":\"liyong\",\"age\":\"28\",\"student\":{\"name\":\"liyong2\",\"age\":\"19\"}}]" ;
        //json字符串轉換爲json數組
        // 使用JsonArray 是爲了多條轉換 一條能夠直接使用JSONObject轉換
        JSONArray jsonArray = JSONArray.fromObject(strJson);
         /*
         * 表示json類中包含的子類,關聯的對象
         * 當有多個對象的時候,繼續put,屬性名,和Class類,
         * list對象 一樣 放 屬性名,和 list 的泛型
         * 在JSONObject.toBean的時候若是轉換的類中有集合,能夠先定義Map<String, Class> classMap = new HashMap<String,Class>();
         * 在classMap中put你要轉換的類中的集合名,像:classMap.put("student", Student.class);
         * 而後在toBean()的時候把參數加上, 
         * 像:Student student=(Student)JSONObject.toBean(jsonObject, Person.class, classMap); 
         */
        Map<String, Class<Student>> map = new HashMap<String, Class<Student>>();
        map.put("student", Student.class);
        //新建對象數組,用來放json轉換的bean對象
        Object[] objects = new Object[jsonArray.size()] ;
        for(int i = 0 ;i<objects.length;i++){
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            // 遍歷json數組,開始轉換對象    第一個  要轉換的json對象 第二個是要轉換成的類對象  第三個 是類對象中的引用對象屬性
            // 用map來存儲  key是屬性名 value 是引用類型
            objects[i] = JSONObject.toBean(jsonObject, Person.class, map);
        }
        // 遍歷引用類型 
        for(int i = 0 ;i<objects.length;i++){
            Person person = (Person) objects[i];
            System.out.println(person.getName()+"==="+person.getAge()+"----"+person.getStudent());
            Student student = person.getStudent();
            System.out.println(student.getName()+"==="+student.getAge());
            
        }
    }
    
    /*
     * 單獨對象,沒有引用其餘對象的實體類
     * 直接轉換
     *  caoke---24
        liyong---19
     */
    @Test
    public void json2beanTest2(){
        // strJson 字符串
        String strJson = "[{\"name\":\"caoke\",\"age\":\"24\"},{\"name\":\"liyong\",\"age\":\"19\"}]" ;
        // 字符串轉換爲字符數組
        // 使用JsonArray 是爲了多條轉換 一條能夠直接使用JSONObject轉換
        JSONArray jsonArray = JSONArray.fromObject(strJson);
        Object [] objects = new Object[jsonArray.size()];
        for(int i =0;i<objects.length;i++){
            // 獲得每個json對象,json對象轉換爲類
            JSONObject jsonObject = JSONObject.fromObject(jsonArray.get(i));
            objects[i] = JSONObject.toBean(jsonObject, Student.class);
        }
        for(int i =0;i<objects.length;i++){
            Student student = (Student)objects[i] ;
            System.out.println(student.getName()+"---"+student.getAge());
        }
        
    }
    
    /*
     * 把map類型的json字符串轉換成一個map集合
     * 把json的鍵值對所有轉換爲map
     * 直接轉換
     *  caoke
        {"name":"caoke","age":"24"}
        caoke
        24
     */
    @Test
    public void json2Map(){
        // strJson 字符串
        String strJson = "{\"m\":\"caoke\",\"map\":{\"name\":\"caoke\",\"age\":\"24\"}}" ;
        // 字符串轉換爲字符數組
        JSONObject jsonObject = JSONObject.fromObject(strJson);
        Map<Object, Object> map =(Map) jsonObject ;
        System.out.println(map.get("m"));
        System.out.println(map.get("map"));
        // 再次把值轉化爲map
        jsonObject = JSONObject.fromObject(map.get("map"));
        map =(Map) jsonObject ;
        System.out.println(map.get("name"));
        System.out.println(map.get("age"));
    }
    /*
     * jsonObject 中放jsonArray
     * 返回map類型的值
     * 用來查詢後給前臺返回數據
     * {"result":true,
     *  "data":[{"student":{"name":"liyong","age":23},"name":"caoke","age":12},
     *          {"student":null,"name":"liyang","age":32}
     *         ]
     * }
     * 
     */
    @Test
    public void jsonObjArry(){
        // 一個對象
        Person person1 = new Person();
        person1.setAge(12);
        person1.setName("caoke");
        // 對象中包含對象
        Student student = new Student();
        student.setAge(23);
        student.setName("liyong");
        person1.setStudent(student);
        // 一個對象
        Person person2 = new Person();
        person2.setAge(32);
        person2.setName("liyang");
        // 添加到集合
        List<Person> persons = new ArrayList<Person>();
        persons.add(person1);
        persons.add(person2);
        // 集合轉換層jsonarray
        JSONArray jsonArray = JSONArray.fromObject(persons);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("result", true);
        jsonObject.put("data", jsonArray);
        System.out.println(jsonObject.toString());
        System.out.println(Json2Java.class.getResource("/"));
    }
    
}
 .net

相關文章
相關標籤/搜索