JAVA-003-数据交换格式


1.数据交换格式

java中主流的数据交换格式有XMLYAMLJSON

1.1.XML

  • XML 指可扩展标记语言(eXtensible Markup Language),是重量级的,进行数据交换时非常占用宽带。

  • 解析方式:

    1、DOM4J:一下将文件加载进内存,不适合大文件解析

    *** 2、SAX:***基于事件对XML进行解析

    3、PULL:Pull解析器的运行方式与SAX 解析器相似。Pull解析是一种流式解析,边读取边解析.从一个xml文档自上往下进行读取。

1.2.JSON

  • JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

  • 格式:

    • JSON数据格式非常简单,简单来说,只有四点:

      **1)**并列数据之间用逗号(,)分隔;

      **2)**映射用冒号(:)表示;

      **3)**并列数据的集合用方括号([])表示;

      **4)**映射的集合用大括号({})表示。

      如下格式

      1
      2
      3
      4
      5
      6
      7
      8
      {
      "error":404,
      "msg":"找不到该页面!",
      "array":[
      {"name":"truly","age":18},
      {"name":"truly01","age":20}
      ]
      }
  • JAVA操作JSON的框架:

    1、JackSon:springmvc自带。

    *** 2、gson:***谷歌的框架

    3、FastJson:阿里公司研发,主流JSON操作框架。

1.3.FastJSON

fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

  • 本次主要学习FastJson如何操作JSON对象。熟悉其中常用的api接口。

    首先需要引入坐标

    1
    2
    3
    4
    5
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
    </dependency>

    1、序列化:java对象转换成json格式

    1
    2
    String text = JSON.toJSONString(obj); //序列化
    VO vo = JSON.parseObject("{...}", VO.class); //反序列化

    对象转JsonObject

    1
    2
    3
    4
    5
    6
    7
    8
    9
    //student对象,转为Object格式字符串
    //调用静态方法,传递要转换的对象
    JSONObject jsonObject=(JSONObject)JSON.toJSON(student);
    //查看参数
    jsonObject.getIntValue("id");
    jsonObject.getString("name");
    System.out.println(jsonObject);
    System.out.println(jsonObject.getIntValue("id"));
    System.out.println(jsonObject.getString("name"));

    2、反序列化:json格式转换成java对象

    1
    User user =JSON.parseObject(json,User.class); //反序列化
    JSON数组转List
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //反序列化
    //JSON类的静态对象parseObject
    //传递要反序列化的JSON对象,传递转换后的集合的泛型的class对象
    List<Student> listMaps = JSONArray.parseArray(JSON.toJSONString(list),Student.class);
    List<Student> mapsList = JSONObject.parseArray(JSON.toJSONString(list), Student.class);
    System.out.println(listMaps);
    System.out.println(mapsList);
    for (Student map : listMaps) {
    System.out.println(map);
    }
    for (Student map : mapsList) {
    System.out.println(map);
    }
    JSON转Map
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //反序列化1
    Map<String,Object> maps = JSONObject.parseObject(jsonString,Map.class);
    for (String key1 : maps.keySet()) {
    System.out.println(key1+"::"+map.get(key1));
    }
    //JSON类的静态方法,parseObject
    //直接进行反序列化,Map集合没有泛型的,泛型没有是不安全的集合
    //转后的集合,必须有泛型
    //调用parseObject传递参数TypeReference类型在TypeReference类的泛型传递转后的Map集合
    Map<String, Student> map1 = JSON.parseObject(jsonString, new TypeReference<Map<String, Student>>() {
    });
    for (String key : map1.keySet()) {
    System.out.println(key+"::"+map.get(key));
    }
    JsonObject转对象
    1
    2
    3
    //反序列化
    Student student1=JSON.toJavaObject(jsonObject, Student.class);
    System.out.println(student1);

    扩展

    JsonObject转JsonString(JSON)
    1
    String jsonString1=JSON.toJSONString(jsonObject);
    JsonString转JsonObject
    1
    2
    3
    JSONObject jsonObject=JSON.parseObject(jsonString);
    #查询
    jsonObject.getString("Name");
    JsonString转JsonArray
    1
    JSONArray jArray=JSON.parseArray(JSON.toJSONString(list));
    JSONArray转String
    1
    String jsonString = jsonArray.toString();

3、JSonFieId注解的使用:

1
2
3
4
5
6
7
8
9
10
11
*@JSonFleId注解
*该注解作用于方法上,字段上和参数上,可在序列化和反序列化时候进行特性功能定制
*JSONFieId注解属性name,指定序列化后的名字
*注解属性ordina序列化后的顺序 值越小属性越靠前
*注解属性format序列化后的格式
*注解属性serialize是否序列化该字段
*注解属性deserialize是否反序列化该字段
*注解属性SerialzeFeatures序列化时的特性定义
**/
//JSONFieId注解属性name,指定序列化后的名字
@JSONFieId(name=``"studentName"``)

4、JsonType注解的使用:

1
2
3
4
5
*@JSonType注解
*改注解作用于类上,对该类的字段进行序列化和反序列化时的特性功能定制
*注解属性:include要被序列化的字段
*注解属性:orders序列化后的顺序
*注解属性:serialzeFeatures序列化时候的特性定义

文章作者: truly
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 truly !
 上一篇
JAVA-004-JAVA反射机制 JAVA-004-JAVA反射机制
Reflection(反射) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查。被private封装的资源只能类内部访问,外部是不行的,但反射能直接操作类私有属性。反射可以在运行时获取一个类的所有信息,(包括成员变量,成员方法,构造器等),并且可以操纵类的字段、方法、构造器等部分!
2022-01-09
下一篇 
【JAVA】_002_JAVA锁机制 【JAVA】_002_JAVA锁机制
JAVA的启程,从理解多线程开始!
2022-01-07
  目录