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