1) JSON(JavaScript Object Notation)
一种简单的数据格式,比xml更轻巧。JSON是JavaScript原生格式,在JavaScript中处理JSON数据不需要任何特殊的API或工具包。
2)JSON数据结构
1.对象
对象表示为“{}”扩起来的内容,结构为 {key:value,key:value,...}格式的键值对。是一个无序的 名称/值对集合。以
{开始,以}结束,每个名称后跟一个:,:后面是对应的值,名称/值 对之间使用,分隔。 key值必须要是string类型,值的类型可以
是:string, number, object, array, true, false, null。
例:{'name':'zhang','age':26};{'users':{'name':'zhang','age':25}};{'name':'China','city':['北京',‘上海’]}。
2.数组(jsonArray)
数组表示为中括号“[]”扩起来的内容,是有序的value的集合。数据结构为 [value,value,value,...]的单值的结构。一个数
组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
例: ["zhangsan","lisi"];[{'name':'zhangsan','age':21},{'name':'lisi','age':20}]。
3)JSON与XML比较:
JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加
快速度。
4)JSON解析
1.原生JSON解析
/*
* JSON对象格式解析
* 1.将JSON对象格式字符串通过JSONObject.fromObject()转化为JSONObject对象
* 2.通过 JSONObject.toBean(JSONObject对象,Class)转化为javabean
* */
public class TestJSONObject {
public static void main(String[] args) {
// JSON对象格式字符串
String str = "{'id':110,'name':'zhangsan','sex':'male','age':18}";
JSONObject jsonObj = JSONObject.fromObject(str);
Student stu = (Student) JSONObject.toBean(jsonObj, Student.class);
System.out.println(stu);
}
}
/*
* JSON数组格式解析
* 1.将JSON数组格式转换为JSONArray对象
* 2.通过JSONArray.toCollection(JSONArray对象, Class)将JSON数组格式转换成对象
* */
public class TestJSONArray {
public static void main(String[] args) {
//JSON数组格式
String str = "[{'id':110,'name':'zhangsan','sex':'male','age':18},{'id':120,'name':'lisi','sex':'female','age':28}]";
JSONArray jsonArray = JSONArray.fromObject(str);
JSONObject jsonObj = jsonArray.getJSONObject(1);
int id = jsonObj.getInt("id");
System.out.println(id);
Collection c = JSONArray.toCollection(jsonArray, Student.class);
System.out.println(c);
}
}
//混合格式json解析
public class TestJSON2 {
public static void main(String[] args) {
String str = "{'name':'中国','provinces':[{'pName':'河南'},{'pName':'山西'}]}";
JSONObject jsonObject = JSONObject.fromObject(str);
Map<String,Class> map = new HashMap<String,Class>();
map.put("provinces", Province.class);
Country c = (Country) JSONObject.toBean(jsonObject, Country.class, map);
System.out.println(c);
}
}
public class TestJSON { public static void main(String[] args) { String str = "{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}"; JSONObject jsonObject2 = JSONObject.fromObject(str); JSONArray jsonArray2 = jsonObject2.getJSONArray("us"); Collection c = JSONArray.toCollection(jsonArray2, User.class); System.out.println(c); System.out.println("---------------自己组装JSON转化为JavaBean----------------"); JSONObject jsonObj = JSONObject.fromObject(str); JSONArray jsonArray = jsonObj.getJSONArray("us"); ArrayList<User> ulist = new ArrayList<User>(); User user = new User(); //循环获取JSON数组中的JSON对象 for(int i=0;i<jsonArray.size();i++){ JSONObject jsonObject = jsonArray.getJSONObject(i); //将获取到的数据封装进user中 user.setName(jsonObject.getString("name")); user.setAge(jsonObject.getInt("age")); ulist.add(user); } Users users = new Users(); users.setUs(ulist); System.out.println(users); }
}
2.Gson解析//对象转换为JSON public class TestToJSON { public static void main(String[] args) { User user = new User("张三", 20); String str = JSONObject.fromObject(user).toString(); System.out.println(str); System.out.println("--------------------------"); ArrayList<User> list = new ArrayList<User>(); list.add(user); String str2 = JSONArray.fromObject(list).toString(); System.out.println(str2); } }
/* * GSON解析JSON * * */ public class TestGson { public static void main(String[] args) { System.out.println("-----------------GSON解析JSON对象字符串-----------------------"); String str = "{'id':110,'name':'zhangsan','sex':'male','age':18}"; Gson gson = new Gson(); Student student = gson.fromJson(str, Student.class); System.out.println(student); System.out.println("----------------GSON解析JSON数组字符串------------------------"); String str2 = "[{'id':110,'name':'zhangsan','sex':'male','age':18},{'id':120,'name':'lisi','sex':'female','age':28}]"; //Gson gson = new Gson(); Type type = new TypeToken<List<Student>>(){}.getType(); List<Student> list = gson.fromJson(str2, type); System.out.println(list); System.out.println("-----------------GSON解析JSON混合字符串-----------------------"); String str3 = "{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}"; //Gson gson = new Gson(); User user = gson.fromJson(str, User.class); System.out.println(user); } }
/* * 对象通过Gson转换为JSON * */ public class TestGsonToJson { public static void main(String[] args) { ArrayList<Users> list = new ArrayList<Users>(); for(int i=0;i<2;i++){ Users users = new Users(); ArrayList<User> ulist = new ArrayList<User>(); for(int j=0;j<2;j++){ User user = new User("zs"+j, 20+j); ulist.add(user); } users.setUs(ulist); list.add(users); } Gson gson = new Gson(); String str = gson.toJson(list); System.out.println(str); } }
3.FastJson(1)普通object格式转换为对象
String str ="{'id':110,'name':'zhangsan','sex':'male','age':18,}";
Student s = JSON.parseObject(str, Student.class);
(2)数组格式转换为集合:
String str = "[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]";
List<Student> s = JSON.parseArray(str, Student.class);
(3)对象转换为json字符串:
普通字符串: JSON.toJSONString(s);
格式字符串:JSON.toJSONString(s,true);