Java Json解析方式以及IDEA的Json转换插件

Java 高级篇

笔记首页

序号内容链接地址
1IO流https://blog.csdn.net/weixin_44141495/article/details/108165699
2多线程https://blog.csdn.net/weixin_44141495/article/details/108277941
3网络编程https://blog.csdn.net/weixin_44141495/article/details/108190461
4Jsonhttps://blog.csdn.net/weixin_44141495/article/details/108285762
5Xmlhttps://blog.csdn.net/weixin_44141495/article/details/108285125
6反射https://blog.csdn.net/weixin_44141495/article/details/108291945
7注解https://blog.csdn.net/weixin_44141495/article/details/108293331
8枚举https://blog.csdn.net/weixin_44141495/article/details/108696056
9Java8新特性https://blog.csdn.net/weixin_44141495/article/details/108696123

JSON

简介

JSON是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。

特点

  • 内容简洁和,层次结构清晰,是一种理想的数据交换语言。

  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

  • 与XML的区别,XML即是一种数据交换格式,可以一种标记语言,而JSON主要是数据的传输。

对比

这是电话归属地的JSON传输格式和XML的区别,直接肉眼上观察,JSON结构更简单,内容更简介,所以计算机读写JSON的速度肯定比XML快,所以JSON的传输效率高于XML

{"success":"1",
  "result":
  {"status":"ALREADY_ATT",
    "phone":"13800138000",
    "area":"010","postno":"100000",
    "att":"中国,北京",
    "ctype":"中国移动138卡",
    "par":"1380013",
    "prefix":"138",
    "operators":"中国移动",
    "style_simcall":"中国,北京",
    "style_citynm":"中华人民共和国,北京市"
  }
}
<?xml version="1.0" encoding="UTF-8" ?>
<root id="1">
    <success status="200" key="12sr">1</success>
    <result>
        <status>ALREADY_ATT</status>
        <phone>13800138000</phone>
        <area>010</area>
        <postno>100000</postno>
        <att>中国,北京</att>
        <ctype>中国移动138卡</ctype>
        <par>1380013</par>
        <prefix>138</prefix>
        <operators>中国移动</operators>
        <style_simcall>中国,北京</style_simcall>
        <style_citynm>中华人民共和国,北京市</style_citynm>
    </result>
</root>

JSON解析方式

Gson:谷歌公司推出的Json解析工具

  • Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。
  • 类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。

FastJson:阿里巴巴推出的Json解析工具

  • FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。

  • FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。

Jackson:Jackson是比较著名的一个解析工具

  • Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架
  • Jackson 社 区相对比较活跃,更新速度也比较快,是最流行的 json 解析器之一

区别

  • FastJson的性能优于Gson,但是处理复杂类型时可能会出现一些错误,到现在还有很多BUG没修。
  • Gson的功能非常的齐全。
  • Jakson性能也非常出色,但是将核心功能拆分成三个模块,有Jar依赖。

image-20200828185940149

如何选择?

新手学习选择Gson,其无依赖,只要一个Jar,我们不考虑性能问题。

Gson解析Json

普通解析

由于json格式是key-value的,所以我们可以用Map进行接收

public static void main(String[] args) {
    //实例化一个Gson解析工具
    Gson gson = new Gson();
   //定义一个Json字符串
    String json="{\"success\":\"1\",\n" +
            "  \"result\":\n" +
            "  {\"status\":\"ALREADY_ATT\",\n" +
            "    \"phone\":\"13800138000\",\n" +
            "    \"area\":\"010\",\"postno\":\"100000\",\n" +
            "    \"att\":\"中国,北京\",\n" +
            "    \"ctype\":\"中国移动138卡\",\n" +
            "    \"par\":\"1380013\",\n" +
            "    \"prefix\":\"138\",\n" +
            "    \"operators\":\"中国移动\",\n" +
            "    \"style_simcall\":\"中国,北京\",\n" +
            "    \"style_citynm\":\"中华人民共和国,北京市\"\n" +
            "  }\n" +
            "}";
    //用Map接收一下字符串
        HashMap hashMap = gson.fromJson(json, HashMap.class);
        for (Object o : hashMap.keySet()) {
            System.out.println(o+"=="+hashMap.get(o));
        }
}

结果

result=={status=ALREADY_ATT, phone=13800138000, area=010, postno=100000, att=中国,北京, ctype=中国移动138卡, par=1380013, prefix=138, operators=中国移动, style_simcall=中国,北京, style_citynm=中华人民共和国,北京市}

success==1

实体类接收

我们想把Json字符串转换成对象我们要先创建一个对象,与Json字符串进行匹配,这样我们就可以轻松将字符串转换成我们可以直接操作的对象,当然这个字符串属性比较多,不过IDEA有很多Json转实体类的插件,非常的便捷。

使用GsonFormat插件进行转换
public static void main(String[] args) {
    Gson gson = new Gson();
    String json="{\"success\":\"1\",\n" +
        "  \"result\":\n" +
        "  {\"status\":\"ALREADY_ATT\",\n" +
        "    \"phone\":\"13800138000\",\n" +
        "    \"area\":\"010\",\"postno\":\"100000\",\n" +
        "    \"att\":\"中国,北京\",\n" +
        "    \"ctype\":\"中国移动138卡\",\n" +
        "    \"par\":\"1380013\",\n" +
        "    \"prefix\":\"138\",\n" +
        "    \"operators\":\"中国移动\",\n" +
        "    \"style_simcall\":\"中国,北京\",\n" +
        "    \"style_citynm\":\"中华人民共和国,北京市\"\n" +
        "  }\n" +
        "}";
    Phone phone = gson.fromJson(json, Phone.class);
    System.out.println(phone.getResult());
    System.out.println(phone.getSuccess());
    System.out.println(phone.toString());
}

结果

Phone{success='1'
, result=ResultBean{status='ALREADY_ATT'
, phone='13800138000'
, area='010'
, postno='100000'
, att='中国,北京'
, ctype='中国移动138卡', par='1380013'
, prefix='138'
, operators='中国移动'
, style_simcall='中国,北京'
, style_citynm='中华人民共和国,北京市'
}
}
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值