zoukankan      html  css  js  c++  java
  • fastjason常用方法

    什么是fastjson?

    Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。

    主要特点:

    • 快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson)
    • 强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
    • 零依赖(没有依赖其它任何类库除了JDK)

    背景

    最近关于fastjson的消息,引起了很多人的关注!

    fastjson爆出重大漏洞,攻击者可使整个业务瘫痪

    漏洞描述

    常用JSON组件FastJson存在远程代码执行漏洞,攻击者可通过精心构建的json报文对目标服务器执行任意命令,从而获得服务器权限。此次爆发的漏洞为以往漏洞中autoType的绕过。

    影响范围

    FastJson < 1.2.48

    很多开发者才猛然发现,fastjson已经深入到我们开发工作的方方面面。那么除了赶快升级你的json外,我们来挖挖fastjson最常用的用法。

    fastjson常用方式

    1.maven依赖(记得升级到1.2.48以上版本哦)

            <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
            <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
             <version>1.2.62</version>
            </dependency>    

    2.FastJson对于json格式字符串的解析主要用到了一下三个类:

    (1)JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。

    (2)JSONObject:fastJson提供的json对象。

    (3)JSONArray:fastJson提供json数组对象。

    3.常用方式

    3.1 string和java对象

    fastjason常用方法

     

    实例1:对象转json字符串

            Map<String,String> map=new HashMap<String,String>();
            map.put("code","0");
            map.put("message","ok");
            String json=JSON.toJSONString(map);
            System.out.println(json);

    输出结果为:

    {"code":"0","message":"ok"}

    实例2:字符串转对象

            Map<String,String> map=new HashMap<String,String>();
            map.put("code","0");
            map.put("message","ok");
            String json=JSON.toJSONString(map);
            System.out.println(json);
            
            Map obj=(Map)JSON.parse(json);
            System.out.println("code="+obj.get("code")+",message="+obj.get("message"));

    输出结果

    {"code":"0","message":"ok"}
    code=0,message=ok

    3.2 工具类JSONObject

        public static void main(String[] args) {
            Map<String,String> map=new HashMap<String,String>();
            map.put("code","0");
            map.put("message","ok");
            String json=JSON.toJSONString(map);
            System.out.println(json);
            
            Map obj=(Map)JSON.parse(json);
            System.out.println("code="+obj.get("code")+",message="+obj.get("message"));        
            
            String code=JSON.parseObject(json).getString("code");
            String message=JSON.parseObject(json).getString("message");
            System.out.println("code="+code+",message="+message);
        }

    输出结果

    {"code":"0","message":"ok"}
    code=0,message=ok
    code=0,message=ok

    3.3 数组对象

    List<user> list=new ArrayList<user>(JSONArray.parseArray(jsonString,user.class)); 

    Fastjson 与各种JSON库的性能比较:

    json库 序列化性能 反序列化性能 jar大小
    fastjson 1201 1216 fastjson-1.1.26.jar(356k)
    fastjson-1.1.25-android.jar(226k)
    jackson 1408 1915 jackson-annotations-2.1.1.jar(34k)
    jackson-core-2.1.1.jar(206k)
    jackson-databind-2.1.1.jar(922k)
    总共1162k
    gson 7421 5065 gson-2.2.2.jar(189k)
    json-lib 27555 87292 json-lib-2.4-jdk15.jar(159k)


  • 相关阅读:
    老李分享:qtp自动化测试框架赏析-关键字自动化测试框架
    QTP自动化测试培训:描述编程之WebElement
    测试开发Python培训:自动发布新浪微博-技术篇
    老李分享:开发python的unittest结果输出样式
    布隆过滤器
    缓存击穿、缓存穿透、缓存雪崩
    JVM锁优化
    Java 异常体系
    常用的SQL调优
    Mysql 索引
  • 原文地址:https://www.cnblogs.com/davidwang456/p/11910021.html
Copyright © 2011-2022 走看看