最近公司开发项目涉及到相关知识点(以前也涉及过,不过没有认真整理),顺便把JSON的入门学习整理一下,主要来源是慕课网的视频总结,如有不足,欢迎大家指出。
一、JSON:
与开发语言无关的、轻量级的数据格式(javaScript Object Notation)
二、用途
Web通讯中数据的交换,数据库,序列化
三、语法
{key1:value1,key2 : value2}
四、数据类型:
数据类型-Object 使用花括号{}包含的键值对结构,Key必须是string类型,value为任何基本类型或数据结构。 Array用中括号[],中间用逗号,分隔元素。
{"name":"李广","values":[1,2,45,"你好"] }
五、JSON的处理
5.1.开发环境
Json Jar包,例如json-20090211.jar
5.2.将数据封装为JSON格式
5.2.1.直接使用JSONObject对象封装json数据(打印以后为无序的,说明底层数据结构为 )
JSONObject test1 = new JSONObject(); test1.put("name","lin"); //存储String类似 test1.put("age",15); //存储int类型 test1.put("object",new MaptoString()); //存储对象类型 test1.put("have_bady",true); //存储boolean类型 test1.put("major",new String[]{"计算机","数学"});//数组类型
//显示 System.out.println(test1.toString()); |
5.2.2.使用Map间接构建JSON对象
Map<String,Object> map1 = HashMap<String,Object> Map1.put(“name”,”lin”); //存储String类似 Map1.put(“age”,15); //存储int 类型 Map1.put(“car”,Object); //存储对象类型 Map1.put(“have_baby”,true); //存储boolean类型 Map1.put(“major”,new String[]{“计算机”,”数学”});//数组类型 JSONObject test2 = new JSONObject(map1);
//显示 System.out.println(test2.toString());
|
5.2.3.使用JavaBean对象构建
publicclass ObjectBean { private String name; privateintage; public String getName() { returnname; } publicvoid setName(String name) { this.name = name; } publicint getAge() { returnage; } publicvoid setAge(intage) { this.age = age; } } publicvoid test3(){ ObjectBean ojb = new ObjectBean(); ojb.setAge(10); ojb.setName("test3"); System.out.println(new JSONObject(ojb).toString()); } |
5.2.4.备注
①对于嵌套类型的JSON数据,使用JSONObject 或者 Map 的均可进行,JSONOBject(Map)的话,使用jsonobject.put(“job”,jsonobject1)/map.put(“job”,jsonobject2);当然,也可以使用数组将jsonobject对象进行封装。
②没有日期格式,日期格式以String类型封装
5.3. 将JSONObjec数据对象进行解析
基本思路都一致,先获取到JSON数据的Stirng,然后将String封装进入JSONObject,接着调用JSONObject对象的方法,依次获得数据。
例子1 文件jsonFile: { "name": "test3", "age": 10 } 主体文件 //获取文件 File file = new File("./resource/JsonFile"); //读取文件中的内容 String content = FileUtils.readFileToString(file); JSONObject test4 = new JSONObject(content); System.out.println(content); //获取 System.out.println(test4.get("name")); System.out.println(test4.get("age")); |
例子2 String str = new String("{\"major\":[\"计算机\",\"数学\"],\"name\":\"lin\",\"have_bady\":true,\"age\":15,\"object\":\"MaptoString@b81eda8\"}"); JSONObject test5 = new JSONObject(str); //显示 System.out.println(test5.get("name")); System.out.println(test5.get("have_bady")); |
5.4.缺点
①无法对javabean对象进行反解析
②没有存储时间类型格式,只是通过String 来装载
六、类JSON 的GSON
6.1.简单介绍:
Gson是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。需要使用的时需要导入相对应的jar包。相对应json有一些比较个性化的设置。
6.2.GSON 封装数据
publicclass ObjectBean { private String name; privateintage; public String getName() { returnname; } publicvoid setName(String name) { this.name = name; } publicint getAge() { returnage; } publicvoid setAge(intage) { this.age = age; } }
publicvoid test1(){ Gson test1 = new Gson(); ObjectBean obj = new ObjectBean(); obj.setAge(15); obj.setName("lin");
//显示 System.out.println(test1.toJson(obj)); } |
6.3.GSON 的特殊点
6.3.1.JavaBean对象的反解析
解析内容 { "name": "test3", "age": 10 } 对象 publicclass ObjectBean { private String name; privateintage; public String getName() { returnname; } publicvoid setName(String name) { this.name = name; } publicint getAge() { returnage; } publicvoid setAge(intage) { this.age = age; } }
publicvoid test3() throws IOException{ // 获取文件 File file = new File("./resource/JsonFile"); // 读取文件中的内容 String content = FileUtils.readFileToString(file); Gson gson = new Gson(); ObjectBean oj = gson.fromJson(content,ObjectBean.class); //显示 System.out.println(oj.getAge()); System.out.println(oj.getName()); } |
6.3.2.对日期格式的处理(不设置格式的话会使用默认格式yyyy-MM-dd处理)
Json 文件 { "name": "test3", "age": 10, "birthday":"1995-05-16" }
JavaBean对象
publicclass ObjectBean { private String name; privateintage; private Date birthday; public String getName() { returnname; } publicvoid setName(String name) { this.name = name; } publicint getAge() { returnage; } publicvoid setAge(intage) { this.age = age; } public Date getBirthday() { returnbirthday; } publicvoid setBirthday(Date birthday) { this.birthday = birthday; }
}
实例代码 publicvoid test4() throws IOException{ // 获取文件 File file = new File("./resource/JsonFile"); // 读取文件中的内容 String content = FileUtils.readFileToString(file); Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create(); ObjectBean oj = gson.fromJson(content,ObjectBean.class); //显示 System.out.println(oj.getBirthday()); 结果//Tue May 16 00:00:00 CST 1995 }
|
小结:JSON以键值对的形式存储数据(Map也是),GSON是对JSON的部分扩展