JSON
来源:互联网 发布:wind数据 编辑:程序博客网 时间:2024/06/02 05:48
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);}}
//对象转换为JSONpublic 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); }}
2.Gson解析/* * 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);