你的位置:首页 > Java教程

[Java教程]JOSN快速入门

1.JSON介绍

  (1)JSON是一种与开发语言无关的,轻量级的数据格式,全称 JavaScript Object  Notation,易于阅读和编写,语言解析和生产

  (2)JSON数据类型表示

       数据结构:Map、Array

       基本类型:String、number、true、false、null

       Map:

                 使用花括号 {} 标识的键值对结构,key必须是String类型,value为任何基本类型或数据结构

                 

       Array:

                 使用中括号 [] 来起始,并用逗号来分割元素,元素可以是任何类型,就是普通意义上的数组

                 

       基本类型:待续。。。。

  (3)JSON数据演示:                                 

      

       {

            "name":“王小二”  ,

            "age" :25 ,

            "birthday" :"1995-01-01" ,

            "project" :["理发","挖掘机"] ,

            "hasGrilfriend" : false ,

            "house":false ,

            "car" :{ }

       }

      注 :  JSON里面没有日期或时间这类数据格式 ,所有的key使用String类型     

  • 数据在键值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

  (4)JSON的使用

   方法JSONObject不规范,我们可以 单击右键使用Refactor中的rename修改方法名,方便地进行同步修改,所有被引用的地方都会被同步改写

   

    JSON Editor Online生成结果:

     

  (5)使用HashMap够建JSON

     

  (6)使用Java Bean创建JSON

      Java Bean即一个实体对象(C#中的叫法),可以重用

      

 (7)解析JSON

   从文件中读取JSON(依赖 commons-io)(待续。。。。。。。http://www.imooc.com/video/12680  慕课网视频)

 (8)说一说 TypeToken 吧

          GSON提供了 TypeToken 这个类来帮助我们捕获像List<MyZhuiHaoDetailModel>这样的泛型信息。

          private List<MyZhuiHaoDetailModel> listLottery = new ArrayList<MyZhuiHaoDetailModel>();

          Gson gson=new Gson();

          listLottery =  gson.fromJson(object.getString("lists"),

          new TypeToken<List<MyZhuiHaoDetailModel>>() {  }.getType());

         上文创建了一个匿名内部类,这样,Java编译器就会把泛型信息编译到这个匿名内部类里,然后在运行时就可以被 getType()方法用反射API提取到。

         下面来看看gson的反序列化,Gson提供了fromJson()方法来实现从Json相关对象到java实体的方法。我们一般都会碰到两种情况,转成单一实体对象和

    转换成对象列表或者其他结构。

    eg:

           》转成单一实体对象:

           json字符串为:{"name":"name0","age":0}

           代码:需要提供两个参数,分别是json字符串以及需要转换对象的类型。

          Person person = gson.fromJson(str, Person.class);

           》转换成对象列表

           List<Person> ps = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());

 

           for(int i = 0; i < ps.size() ; i++)

 

           {

 

                    Person p = ps.get(i);

 

                   System.out.println(p.toString());

 

            }

     注:如果我没有写大括号{};就是TypeToken<List<Person>>()后面的这个{},表示很普通的new一个对象,如果那个类的构造方法是私有的,

    肯定不能直接new了,否则就会编译报错。加上大括号表示你new了一个匿名内部类的对象,比如new TypeToken<List<Person>>(){},这个匿名内部

 类继承自TypeToken类。。你可以在大括号里面像写其他普通类代码一样随意写代码。。你可以在里面定义个方法等等。。

《匿名内部类》
比如我们给一个按钮加监听。。比如JButton btn = new JButton("test");    btn.addActionListener(new ActionListener() {						public void actionPerformed(ActionEvent e) {							}		});
 btn.addActionListener()方法接受的是一个ActionListener类型的对象。。而ActionListener是一个接口。。不能直接new。。所以本来我们应该写一个类实现
ActionListener接口。。然后这里给他传一个那个实现类的对象。。但是。。我们不想那么麻烦了。。因为这种情况太多。。所以我们直接在这里创建了那个类。。
之所以叫匿名。。就是我们没有给他取名字就让他叫ActionListener接口的名字。。然后在这里实现那个方法。。


待续。。。。。。