JSON全面讲解

一、Json简介

    概念:JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。

    优点:

(1)本质就是具有特定格式的字符串

(2)JSON完全独立于编程语言

(3)JSON比XML数据传输的有效性要高出很多,更省流量

    缺点:

语义性较差,不如XML直观

二、JSON数据格式

    整体结构

(1) String json1 = “{“id” : “12”,”name” : “Tom”}”

(2)String json2 = “[{“id” : “12”,”name” : “Tom”},{“id” : “12”,”name” : “Tom”}]”

对象:{}  -----类似于java中的map集合

(1)Json对象的结构:{key1:value1,key2:value2...}

(2)key的数据类型:字符串

(3)value的数据类型:数值、字符串、null、json数据[]、json对象{}、

数组:[] ----类似于java中list集合

(1)Json数组的结构:[value1,value2....]

(2)value的数据类型:数值、字符串、null、json数组[]、json对象{}

三、JSON解析方向

    将java对象(包括集合)转换为json格式字符串----在服务端应用

    将json格式的字符串转换为java对象(包含集合)----在客户端应用

和java之间的转换关系

    (1)json对象对应javabean对象

    (2)Json数组和java对象构成的list对应

四、JSON解析技术

原生技术

    特点:编程相对麻烦

    数据之间的转换

(1)将json格式的字符串{}转换为java对象

(json):将json字符串解析为json对象

根据name,在json对象中得到对应的Value

根据name,在json对象中得到对应的Value

方法会在对应的key中的值不存在的时候返回一个空字符串或者返回你指定的默认值。

但是get方法会出现空指针异常的情况。

(2)将json格式的字符串[]转换为java对象的List

  API:

将json字符串解析为json数组

得到json数组中元素的个数

(3)复杂json数据解析

其实就是既有json字符串又有json数组

Google没有提供将java转换为json的方法。

 

Gson框架技术

    特点:编码简洁,Google官方推荐

    数据之间转换:

    (1)将json格式的字符串{}转换为java对象

    API:

         <T> T fromJson(String json,Class<T> classofT)

   注意:要求Json对象中的key的名称与java对象对应的类中的属性名要相同

    步骤:

    (a)将Gson的jar包导入的项目中

    (b)创建Gson对象

                   Gson gson = new Gson();

    (c)通过创建的Gson对象调用fromJson()方法,返回该Json数据对应的java对象

                  DataInfo dataInfo = gson.fromJson(json,DataInfo,class);

 

(2)将json格式的字符串[]转换为java对象的List

    API:

             fromJson(json,Type typeofT);

   步骤:

      (a)将Gson的jar包导入的项目中

      (b)创建Gson对象

                             Gson gson = new Gson();

      (c)通过创建的Gson对象调用fromJson()方法,返回该Json数据对应的java集合

     List<DataInfo> infos = gson.fromJson(josn,new TypeToken<List<DataInfo>>(){}.getType());

 (3)将java对象转换为json字符串{}

        String toJson(Object src);

  

     (a)将Gson的jar包导入的项目中

     (b)创建Gson对象

                 Gson gson = new Gson();

     (c)通过创建的Gson对象调用toJson()方法,返回该Json数据

                      DataInfo info = new DataInfo(1,”apple”,250.0,”eggs”);

                      String json = gson.toJson(info);

(4)将java对象的List转换为json字符串[]

    API:

               String toJson(Object src);

   步骤:

      (a)将Gson的jar包导入的项目中

      (b)创建Gson对象

                            Gson gson = new Gson();

      (c)通过创建的Gson对象调用toJson()方法,返回该Json数据

                       List<DataInfo> infoList = new ArrayList<>();

                      String json = gson.toJson(infoList);

FastJson技术

    特点:FastJson是一个java语言编写的高性能功能完善的Json库,它采用一种“假定有序快速匹配”的算法,把Json解析的性能提升到极致,是目前java语言中最快的Josn库

    数据间转换

(1)将json格式的字符串{}转换为java对象

   API:

   <T> T parseObject(String json,Class<T> classOfT);

   步骤:

      (a)将FastJson的jar包导入的项目中

      (b)JSON调用parseObject()方法,获取转换后的java对象

             DataInfo dataInfo = JSON.parseObject(json,DataInfo.class);

(2)将json格式的字符串[]转换为java对象的List

  API:

            List<T> parseArray(String json,Class<T> classOfT);

  步骤:

       (a)将FastJson的jar包导入的项目中

       (b)JSON调用parseArray()方法,获取转换后的java集合

              List<DataInfo> infoList = new ArrayList(json,DataInfo.class);

(3)将java对象转换为json字符串{}

    API:

          String toJSONString(Object object);

    步骤:

      (a)将FastJson的jar包导入的项目中

      (b)JSON调用toJSONString()方法,获取转换后的json数据

                 DataInfo  dataInfo = new DataInfo(1,”apple”,2,”eggs”);

                 String json = JSON.toJSONString(dataInfo);

(4)将java对象的List转换为json字符串[]

    API:

          String toJSONString(Object object);

   步骤:

将FastJson的jar包导入的项目中

调用toJSONString()方法,获取转换后的json数据

                  List<DataInfo> infoList = new ArrayList();

             DataInfo zhangsan = new DataInfo(1,zhangsan);

                   DataInfo lisi = new DataInfo(2,lisi);

                        infoList.add(zhangsan);

                       infoList.add( lisi );

                String json = JSON.toString(infoList);

最后说一下根据不同的json数据(获取到的json数据用HI JSON 进行格式化,就会很清晰json数据的结构),JavaBean类的编写原则:

(1)遇到{}就写一个类

(2)遇到[]就写一个集合一般写ArrayLsit

(3)什么符号都没有,就是基本数据类型

(4)尽量把javaBean对象定义广一些

(5)有的人说我不想写那个,太烦了,好吧,GsonFormat工具可以自动生成javaBean类