JSON入门学习(GSON 的简单介绍)

最近公司开发项目涉及到相关知识点(以前也涉及过,不过没有认真整理),顺便把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的部分扩展


猜你喜欢

转载自blog.csdn.net/kunfd/article/details/80861735