fastjson详解

这篇具有很好参考价值的文章主要介绍了fastjson详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、fastjson介绍

​在前后端数据传输交互中,经常会遇到字符串(String)与json,XML等格式相互转换与解析,其中json以跨语言,跨前后端的优点在开发中被频繁使用,基本上可以说是标准的数据交换格式。fastjson 是一个java语言编写的高性能且功能完善的JSON库,它采用一种“假定有序快速匹配”的算法,把JSON Parse 的性能提升到了极致。它的接口简单易用,已经被广泛使用在缓存序列化,协议交互,Web输出等各种应用场景中。

FastJson是啊里巴巴的的开源库,用于对JSON格式的数据进行解析和打包。

特点如下:

  1. 能够支持将java bean序列化成JSON字符串,也能够将JSON字符串反序列化成Java bean。
  2. 顾名思义,fastjson操作 JSON的速度是非常快的。
  3. 无其他包的依赖。
  4. 使用比较方便。
二、fastjson使用

maven依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <!--(起码1.2.48以上)因为这个版本一下存在漏洞-->
    <version>版本根据自己需要</version>
</dependency>
三、fastjson常用API

fastjson API 入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。

public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray

public static final JSONObject parseObject(String text)// 把JSON文本parse成JSONObject 
    
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean 

public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 

public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 

public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 

public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 

public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray。

四、示例

public class User {
    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
public class UserGroup {

    private String name;
    private List<User> users = new ArrayList<User>();

    public UserGroup() {
    }

    public UserGroup(String name, List<User> users) {
        this.name = name;
        this.users = users;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }

    @Override
    public String toString() {
        return "UserGroup{" +
                "name='" + name + '\'' +
                ", users=" + users +
                '}';
    }
}

1. java类转换为json字符串:

	/**
     * java对象转换为json字符串
     */
    @Test
    public void objToJson() {
        //简单对象转换
        User user = new User("root", "123456");
        //调用toJSONString()
        String userJson = JSON.toJSONString(user);
        System.out.println("java类转换为json串:" + userJson);

        //集合转json串
        User user1 = new User("zhangsan", "123456");
        User user2 = new User("lisi", "000");
        List<User> users = new ArrayList<User>();
        users.add(user1);
        users.add(user2);
        //调用toJSONString()
        String usersjson = JSON.toJSONString(users);
        System.out.println("集合转json串:" + usersjson);

        //复杂java类转换对象
        UserGroup userGroup = new UserGroup("userGroup", users);
        //调用toJSONString()
        String userGroupJson = JSON.toJSONString(userGroup);
        System.out.println("复杂java类转换json串:" + userGroupJson);
    }
java类转换为json串:{"password":"123456","username":"root"}
集合转json串:[{"password":"123456","username":"zhangsan"},{"password":"000","username":"lisi"}]
复杂java类转换json串:{"name":"userGroup","users":[{"password":"123456","username":"zhangsan"},{"password":"000","username":"lisi"}]}

2. json字符串转为java类:

/**
     * json字符串转为java类
     * 注:字符串中使用双引号需要转义 (" --> \"),这里使用的是单引号,易读性会好很多。
     * json串以“{}”包裹,转换为java类时,使用:parseObject();
     * json串以“[]”包裹,转换为java类时,使用:parseArray();
     */
    @Test
    public void jsonToObj(){
        /* json字符串转简单java对象
         * 字符串:{"password":"123456","username":"dmego"}
         */
        String jsonStr1 = "{'password':'123456','username':'ggf'}";
        // 调用parseObject()
        User user = JSON.parseObject(jsonStr1, User.class);
        System.out.println("json字符串转简单java对象:"+user.toString());

        /*
         * json字符串转List<Object>对象
         * 字符串:[{"password":"123123","username":"zhangsan"},
         *        {"password":"321321","username":"lisi"}]
         */
        String jsonStr2 = "[{'password':'123123','username':'zhangsan'},{'password':'321321','username':'lisi'}]";
        // 调用parseArray()将字符串转为集合
        List<User> users = JSON.parseArray(jsonStr2, User.class);
        System.out.println("json字符串转List<Object>对象:"+users.toString());

        /*json字符串转复杂java对象
         * 字符串:{"name":"userGroup","users":[{"password":"123123","username":"zhangsan"},{"password":"321321","username":"lisi"}]}
         * */
        String jsonStr3 = "{'name':'userGroup','users':[{'password':'123123','username':'zhangsan'},{'password':'321321','username':'lisi'}]}";
        UserGroup userGroup = JSON.parseObject(jsonStr3, UserGroup.class);
        System.out.println("json字符串转复杂java对象:"+userGroup);
    }
json字符串转简单java对象:User{username='ggf', password='123456'}
json字符串转List<Object>对象:[User{username='zhangsan', password='123123'}, User{username='lisi', password='321321'}]
json字符串转复杂java对象:UserGroup{name='userGroup', users=[User{username='zhangsan', password='123123'}, User{username='lisi', password='321321'}]}
五、实际应用

1. 对复杂的json串转为java类:
首先有这么一个json字符串,这是一个羊肉汤的菜谱,数据来源于《聚合数据》

{
  "resultcode":"200",
  "reason":"Success",
  "result":{
    "data":[
      {
        "id":"6269",
        "title":"羊肉汤",
        "tags":"增强抵抗力;煮;家常菜;汤;鲁菜",
        "imtro":"邹城人有喝羊汤的习惯,春夏秋冬羊汤馆总断不了食客,春秋天气候干燥要喝,夏天入伏要喝“伏羊汤”,阴冷的冬季尤其要喝碗羊汤才够温暖。以至于邀友喝羊汤成为了礼仪;“二哥,晚上咱们喝羊汤去”。邹城的羊汤铺遍地开花,以至于单县羊汤、滕州羊汤在邹城都没有了用武之地。我们这里的羊汤做法是最纯的,基本不放煮肉的香料,就用羊骨和羊肉煮成,“肉嫩汤浓”是其特色。 煮羊汤要先煮羊骨,把羊骨斩成大段焯水后放一点羊板油用细火煮,煮到汤白味浓时放入羊肉。羊肉煮到用筷子能轻松插穿时就要捞出,久煮的话羊肉过烂就失去了软嫩的口感。 碗里放入葱花或蒜粒,调入精盐,放入切的薄薄的羊肉片。把烧的滚开的羊汤盛到碗里,洒上香菜,再挖上一匙子香辣的用羊油泼成的辣椒油,一个字“香”!",
        "ingredients":"山羊肉,500g;羊骨,1000g",
        "burden":"生姜,适量;精盐,适量;香菜,适量;大葱,适量;辣椒油,适量;羊板油,适量",
        "albums":[
          "http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/t\/7\/6269_379835.jpg"
        ],
        "steps":[
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_95d65e77b58a1b6b.jpg",
            "step":"1.羊脊骨洗净用刀斩成段。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_a8136c10401a1643.jpg",
            "step":"2.煮锅里倒入清水,放入羊脊骨,羊肉煮开后捞出。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_c7b1c9fc85ddc6de.jpg",
            "step":"3.煮锅里倒入开水,放入羊脊骨生姜块大火煮开后改小火。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_2b284dc30b4f0875.jpg",
            "step":"4.小火煮40分钟,煮至汤色发白。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_c7ade6439eb2db5a.jpg",
            "step":"5.放入羊肉,加入适量的羊板油小火煮30分钟。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_579748e3b0f15963.jpg",
            "step":"6.捞出煮好的羊肉,晾凉后切薄片。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_1550e6f127aa1077.jpg",
            "step":"7.碗里放入葱花,调入精盐。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_a2c965d77b96da70.jpg",
            "step":"8.放入羊肉片,把滚开的羊汤倒入碗里洒上香菜末。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_eea9b807d1dc5995.jpg",
            "step":"9.可以根据喜好调入陈醋放入蒜粒,最后调入辣椒油即可。"
          }
        ]
      }
    ],
    "totalNum":"9",
    "pn":0,
    "rn":"1"
  },
  "error_code":0
}

要想解析这种复杂的字符串,把它转换成java类的话,首先得先定义好与之相符的java POJO 对象,从上面的json字符串组成来看,我们可以拆分出来四个bean:

最外层的响应:ResponseData

返回结果:ResultBean

数据:DataBean

做菜步骤:StepsBean

将拿到的json字符串数据,用GsonFormat工具来生成java类。

GsonFormat工具的使用可参考该文章:https://www.cnblogs.com/1024zy/p/6370305.html

public class ResponseData {


    /**
     * resultcode : 200
     * reason : Success
     * result : {"data":[{"id":"6269","title":"羊肉汤","tags":"增强抵抗力;煮;家常菜;汤;鲁菜","imtro":"邹城人有喝羊汤的习惯,春夏秋冬羊汤馆总断不了食客,春秋天气候干燥要喝,夏天入伏要喝\u201c伏羊汤\u201d,阴冷的冬季尤其要喝碗羊汤才够温暖。以至于邀友喝羊汤成为了礼仪;\u201c二哥,晚上咱们喝羊汤去\u201d。邹城的羊汤铺遍地开花,以至于单县羊汤、滕州羊汤在邹城都没有了用武之地。我们这里的羊汤做法是最纯的,基本不放煮肉的香料,就用羊骨和羊肉煮成,\u201c肉嫩汤浓\u201d是其特色。 煮羊汤要先煮羊骨,把羊骨斩成大段焯水后放一点羊板油用细火煮,煮到汤白味浓时放入羊肉。羊肉煮到用筷子能轻松插穿时就要捞出,久煮的话羊肉过烂就失去了软嫩的口感。 碗里放入葱花或蒜粒,调入精盐,放入切的薄薄的羊肉片。把烧的滚开的羊汤盛到碗里,洒上香菜,再挖上一匙子香辣的用羊油泼成的辣椒油,一个字\u201c香\u201d!","ingredients":"山羊肉,500g;羊骨,1000g","burden":"生姜,适量;精盐,适量;香菜,适量;大葱,适量;辣椒油,适量;羊板油,适量","albums":["http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/t/7/6269_379835.jpg"],"steps":[{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_95d65e77b58a1b6b.jpg","step":"1.羊脊骨洗净用刀斩成段。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a8136c10401a1643.jpg","step":"2.煮锅里倒入清水,放入羊脊骨,羊肉煮开后捞出。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7b1c9fc85ddc6de.jpg","step":"3.煮锅里倒入开水,放入羊脊骨生姜块大火煮开后改小火。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_2b284dc30b4f0875.jpg","step":"4.小火煮40分钟,煮至汤色发白。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7ade6439eb2db5a.jpg","step":"5.放入羊肉,加入适量的羊板油小火煮30分钟。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_579748e3b0f15963.jpg","step":"6.捞出煮好的羊肉,晾凉后切薄片。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_1550e6f127aa1077.jpg","step":"7.碗里放入葱花,调入精盐。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a2c965d77b96da70.jpg","step":"8.放入羊肉片,把滚开的羊汤倒入碗里洒上香菜末。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_eea9b807d1dc5995.jpg","step":"9.可以根据喜好调入陈醋放入蒜粒,最后调入辣椒油即可。"}]}],"totalNum":"9","pn":0,"rn":"1"}
     * error_code : 0
     */

    private String resultcode;
    private String reason;
    private ResultBean result;
    private int error_code;

    public String getResultcode() {
        return resultcode;
    }

    public void setResultcode(String resultcode) {
        this.resultcode = resultcode;
    }

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

    public ResultBean getResult() {
        return result;
    }

    public void setResult(ResultBean result) {
        this.result = result;
    }

    public int getError_code() {
        return error_code;
    }

    public void setError_code(int error_code) {
        this.error_code = error_code;
    }

    public static class ResultBean {
        /**
         * data : [{"id":"6269","title":"羊肉汤","tags":"增强抵抗力;煮;家常菜;汤;鲁菜","imtro":"邹城人有喝羊汤的习惯,春夏秋冬羊汤馆总断不了食客,春秋天气候干燥要喝,夏天入伏要喝\u201c伏羊汤\u201d,阴冷的冬季尤其要喝碗羊汤才够温暖。以至于邀友喝羊汤成为了礼仪;\u201c二哥,晚上咱们喝羊汤去\u201d。邹城的羊汤铺遍地开花,以至于单县羊汤、滕州羊汤在邹城都没有了用武之地。我们这里的羊汤做法是最纯的,基本不放煮肉的香料,就用羊骨和羊肉煮成,\u201c肉嫩汤浓\u201d是其特色。 煮羊汤要先煮羊骨,把羊骨斩成大段焯水后放一点羊板油用细火煮,煮到汤白味浓时放入羊肉。羊肉煮到用筷子能轻松插穿时就要捞出,久煮的话羊肉过烂就失去了软嫩的口感。 碗里放入葱花或蒜粒,调入精盐,放入切的薄薄的羊肉片。把烧的滚开的羊汤盛到碗里,洒上香菜,再挖上一匙子香辣的用羊油泼成的辣椒油,一个字\u201c香\u201d!","ingredients":"山羊肉,500g;羊骨,1000g","burden":"生姜,适量;精盐,适量;香菜,适量;大葱,适量;辣椒油,适量;羊板油,适量","albums":["http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/t/7/6269_379835.jpg"],"steps":[{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_95d65e77b58a1b6b.jpg","step":"1.羊脊骨洗净用刀斩成段。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a8136c10401a1643.jpg","step":"2.煮锅里倒入清水,放入羊脊骨,羊肉煮开后捞出。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7b1c9fc85ddc6de.jpg","step":"3.煮锅里倒入开水,放入羊脊骨生姜块大火煮开后改小火。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_2b284dc30b4f0875.jpg","step":"4.小火煮40分钟,煮至汤色发白。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7ade6439eb2db5a.jpg","step":"5.放入羊肉,加入适量的羊板油小火煮30分钟。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_579748e3b0f15963.jpg","step":"6.捞出煮好的羊肉,晾凉后切薄片。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_1550e6f127aa1077.jpg","step":"7.碗里放入葱花,调入精盐。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a2c965d77b96da70.jpg","step":"8.放入羊肉片,把滚开的羊汤倒入碗里洒上香菜末。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_eea9b807d1dc5995.jpg","step":"9.可以根据喜好调入陈醋放入蒜粒,最后调入辣椒油即可。"}]}]
         * totalNum : 9
         * pn : 0
         * rn : 1
         */

        private String totalNum;
        private int pn;
        private String rn;
        private List<DataBean> data;

        public String getTotalNum() {
            return totalNum;
        }

        public void setTotalNum(String totalNum) {
            this.totalNum = totalNum;
        }

        public int getPn() {
            return pn;
        }

        public void setPn(int pn) {
            this.pn = pn;
        }

        public String getRn() {
            return rn;
        }

        public void setRn(String rn) {
            this.rn = rn;
        }

        public List<DataBean> getData() {
            return data;
        }

        public void setData(List<DataBean> data) {
            this.data = data;
        }

        public static class DataBean {
            /**
             * id : 6269
             * title : 羊肉汤
             * tags : 增强抵抗力;煮;家常菜;汤;鲁菜
             * imtro : 邹城人有喝羊汤的习惯,春夏秋冬羊汤馆总断不了食客,春秋天气候干燥要喝,夏天入伏要喝“伏羊汤”,阴冷的冬季尤其要喝碗羊汤才够温暖。以至于邀友喝羊汤成为了礼仪;“二哥,晚上咱们喝羊汤去”。邹城的羊汤铺遍地开花,以至于单县羊汤、滕州羊汤在邹城都没有了用武之地。我们这里的羊汤做法是最纯的,基本不放煮肉的香料,就用羊骨和羊肉煮成,“肉嫩汤浓”是其特色。 煮羊汤要先煮羊骨,把羊骨斩成大段焯水后放一点羊板油用细火煮,煮到汤白味浓时放入羊肉。羊肉煮到用筷子能轻松插穿时就要捞出,久煮的话羊肉过烂就失去了软嫩的口感。 碗里放入葱花或蒜粒,调入精盐,放入切的薄薄的羊肉片。把烧的滚开的羊汤盛到碗里,洒上香菜,再挖上一匙子香辣的用羊油泼成的辣椒油,一个字“香”!
             * ingredients : 山羊肉,500g;羊骨,1000g
             * burden : 生姜,适量;精盐,适量;香菜,适量;大葱,适量;辣椒油,适量;羊板油,适量
             * albums : ["http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/t/7/6269_379835.jpg"]
             * steps : [{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_95d65e77b58a1b6b.jpg","step":"1.羊脊骨洗净用刀斩成段。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a8136c10401a1643.jpg","step":"2.煮锅里倒入清水,放入羊脊骨,羊肉煮开后捞出。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7b1c9fc85ddc6de.jpg","step":"3.煮锅里倒入开水,放入羊脊骨生姜块大火煮开后改小火。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_2b284dc30b4f0875.jpg","step":"4.小火煮40分钟,煮至汤色发白。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7ade6439eb2db5a.jpg","step":"5.放入羊肉,加入适量的羊板油小火煮30分钟。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_579748e3b0f15963.jpg","step":"6.捞出煮好的羊肉,晾凉后切薄片。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_1550e6f127aa1077.jpg","step":"7.碗里放入葱花,调入精盐。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a2c965d77b96da70.jpg","step":"8.放入羊肉片,把滚开的羊汤倒入碗里洒上香菜末。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_eea9b807d1dc5995.jpg","step":"9.可以根据喜好调入陈醋放入蒜粒,最后调入辣椒油即可。"}]
             */

            private String id;
            private String title;
            private String tags;
            private String imtro;
            private String ingredients;
            private String burden;
            private List<String> albums;
            private List<StepsBean> steps;

            public String getId() {
                return id;
            }

            public void setId(String id) {
                this.id = id;
            }

            public String getTitle() {
                return title;
            }

            public void setTitle(String title) {
                this.title = title;
            }

            public String getTags() {
                return tags;
            }

            public void setTags(String tags) {
                this.tags = tags;
            }

            public String getImtro() {
                return imtro;
            }

            public void setImtro(String imtro) {
                this.imtro = imtro;
            }

            public String getIngredients() {
                return ingredients;
            }

            public void setIngredients(String ingredients) {
                this.ingredients = ingredients;
            }

            public String getBurden() {
                return burden;
            }

            public void setBurden(String burden) {
                this.burden = burden;
            }

            public List<String> getAlbums() {
                return albums;
            }

            public void setAlbums(List<String> albums) {
                this.albums = albums;
            }

            public List<StepsBean> getSteps() {
                return steps;
            }

            public void setSteps(List<StepsBean> steps) {
                this.steps = steps;
            }

            public static class StepsBean {
                /**
                 * img : http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_95d65e77b58a1b6b.jpg
                 * step : 1.羊脊骨洗净用刀斩成段。
                 */

                private String img;
                private String step;

                public String getImg() {
                    return img;
                }

                public void setImg(String img) {
                    this.img = img;
                }

                public String getStep() {
                    return step;
                }

                public void setStep(String step) {
                    this.step = step;
                }
            }
        }
    }
}

对应的实体类创建后,接下来就可以使用fastjson中的方法将json串转换成对象使用了

	/**
     * 将复杂的json串转换为java类
     */
    @Test
    public void jsonToComplexObj() {
        // 读取类路径下的caipu.json文件,这里使用了第三方工具hutool进行读取json文件
        // 工具类参见:https://hutool.cn/docs/#/
        String jsonStr = FileUtil.readUtf8String(new File("caipu.json"));
        System.out.println(jsonStr);
        // 转换为java类
        ResponseData resp = JSON.parseObject(jsonStr, ResponseData.class);
        System.out.println(resp);

        // 通过对象操作数据
        // 获取响应码resultcode
        System.out.println(resp.getResultcode());
        // 获取响应数据
        ResponseData.ResultBean result = resp.getResult();
        System.out.println("result响应数据:" + result);
    }

输出结果:

{
  "resultcode":"200",
  "reason":"Success",
  "result":{
    "data":[
      {
        "id":"6269",
        "title":"羊肉汤",
        "tags":"增强抵抗力;煮;家常菜;汤;鲁菜",
        "imtro":"邹城人有喝羊汤的习惯,春夏秋冬羊汤馆总断不了食客,春秋天气候干燥要喝,夏天入伏要喝“伏羊汤”,阴冷的冬季尤其要喝碗羊汤才够温暖。以至于邀友喝羊汤成为了礼仪;“二哥,晚上咱们喝羊汤去”。邹城的羊汤铺遍地开花,以至于单县羊汤、滕州羊汤在邹城都没有了用武之地。我们这里的羊汤做法是最纯的,基本不放煮肉的香料,就用羊骨和羊肉煮成,“肉嫩汤浓”是其特色。 煮羊汤要先煮羊骨,把羊骨斩成大段焯水后放一点羊板油用细火煮,煮到汤白味浓时放入羊肉。羊肉煮到用筷子能轻松插穿时就要捞出,久煮的话羊肉过烂就失去了软嫩的口感。 碗里放入葱花或蒜粒,调入精盐,放入切的薄薄的羊肉片。把烧的滚开的羊汤盛到碗里,洒上香菜,再挖上一匙子香辣的用羊油泼成的辣椒油,一个字“香”!",
        "ingredients":"山羊肉,500g;羊骨,1000g",
        "burden":"生姜,适量;精盐,适量;香菜,适量;大葱,适量;辣椒油,适量;羊板油,适量",
        "albums":[
          "http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/t\/7\/6269_379835.jpg"
        ],
        "steps":[
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_95d65e77b58a1b6b.jpg",
            "step":"1.羊脊骨洗净用刀斩成段。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_a8136c10401a1643.jpg",
            "step":"2.煮锅里倒入清水,放入羊脊骨,羊肉煮开后捞出。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_c7b1c9fc85ddc6de.jpg",
            "step":"3.煮锅里倒入开水,放入羊脊骨生姜块大火煮开后改小火。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_2b284dc30b4f0875.jpg",
            "step":"4.小火煮40分钟,煮至汤色发白。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_c7ade6439eb2db5a.jpg",
            "step":"5.放入羊肉,加入适量的羊板油小火煮30分钟。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_579748e3b0f15963.jpg",
            "step":"6.捞出煮好的羊肉,晾凉后切薄片。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_1550e6f127aa1077.jpg",
            "step":"7.碗里放入葱花,调入精盐。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_a2c965d77b96da70.jpg",
            "step":"8.放入羊肉片,把滚开的羊汤倒入碗里洒上香菜末。"
          },
          {
            "img":"http:\/\/juheimg.oss-cn-hangzhou.aliyuncs.com\/cookbook\/s\/63\/6269_eea9b807d1dc5995.jpg",
            "step":"9.可以根据喜好调入陈醋放入蒜粒,最后调入辣椒油即可。"
          }
        ]
      }
    ],
    "totalNum":"9",
    "pn":0,
    "rn":"1"
  },
  "error_code":0
}

fastjson.ResponseData@445b84c0
200
result响应数据:fastjson.ResponseData$ResultBean@61a52fbd

2. 对json串的操作:
在实际开发中,我们经常要对接口返回的json数据,进行操作,获取里面的某些数据。还是以上面的json字符串为例,使用fastjson,对json字符串进行操作

/**
     * 对json串的操作
     */
    @Test
    public void operateJson() {
        // 读取本地json文本
        String jsonStr = FileUtil.readUtf8String(new File("caipu.json"));
        // 创建json对象
        JSONObject jsonObj = JSONObject.parseObject(jsonStr);
        // 操作json内容
        // 获取响应码resultcode
        System.out.println(jsonObj.get("resultcode"));
        // 获取响应信息reason
        System.out.println(jsonObj.getString("reason"));
        // 获取data
        JSONObject resJsonObj = (JSONObject)jsonObj.get("result");
        System.out.println(resJsonObj.getString("data"));

    }

输出结果:

200
Success
[{"albums":["http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/t/7/6269_379835.jpg"],"imtro":"邹城人有喝羊汤的习惯,春夏秋冬羊汤馆总断不了食客,春秋天气候干燥要喝,夏天入伏要喝“伏羊汤”,阴冷的冬季尤其要喝碗羊汤才够温暖。以至于邀友喝羊汤成为了礼仪;“二哥,晚上咱们喝羊汤去”。邹城的羊汤铺遍地开花,以至于单县羊汤、滕州羊汤在邹城都没有了用武之地。我们这里的羊汤做法是最纯的,基本不放煮肉的香料,就用羊骨和羊肉煮成,“肉嫩汤浓”是其特色。 煮羊汤要先煮羊骨,把羊骨斩成大段焯水后放一点羊板油用细火煮,煮到汤白味浓时放入羊肉。羊肉煮到用筷子能轻松插穿时就要捞出,久煮的话羊肉过烂就失去了软嫩的口感。 碗里放入葱花或蒜粒,调入精盐,放入切的薄薄的羊肉片。把烧的滚开的羊汤盛到碗里,洒上香菜,再挖上一匙子香辣的用羊油泼成的辣椒油,一个字“香”!","ingredients":"山羊肉,500g;羊骨,1000g","id":"6269","title":"羊肉汤","steps":[{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_95d65e77b58a1b6b.jpg","step":"1.羊脊骨洗净用刀斩成段。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a8136c10401a1643.jpg","step":"2.煮锅里倒入清水,放入羊脊骨,羊肉煮开后捞出。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7b1c9fc85ddc6de.jpg","step":"3.煮锅里倒入开水,放入羊脊骨生姜块大火煮开后改小火。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_2b284dc30b4f0875.jpg","step":"4.小火煮40分钟,煮至汤色发白。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7ade6439eb2db5a.jpg","step":"5.放入羊肉,加入适量的羊板油小火煮30分钟。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_579748e3b0f15963.jpg","step":"6.捞出煮好的羊肉,晾凉后切薄片。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_1550e6f127aa1077.jpg","step":"7.碗里放入葱花,调入精盐。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a2c965d77b96da70.jpg","step":"8.放入羊肉片,把滚开的羊汤倒入碗里洒上香菜末。"},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_eea9b807d1dc5995.jpg","step":"9.可以根据喜好调入陈醋放入蒜粒,最后调入辣椒油即可。"}],"tags":"增强抵抗力;煮;家常菜;汤;鲁菜","burden":"生姜,适量;精盐,适量;香菜,适量;大葱,适量;辣椒油,适量;羊板油,适量"}]
六、fastjson楼栋问题

可参考文章:https://www.cnblogs.com/chaos-li/p/11139992.html

真实项目中使用建设使用版本大于:1.2.45

注意

序列化的类必须有一个无参构造方法

被序列化的类需要有一个无参的构造方法。否则会报错

Exception in thread "main" com.alibaba.fastjson.JSONException: default constructor not found. class User

如果你没有重写构造方法,那么每个类都自带一个无参的构造方法,但是如果你重写了一个有参的构造方法,那么默认的无参构造方法会被覆盖,这时候就需要你手动写一个无参的构造方法进去。所以我建议保险起见,需要被json序列化的类最好都手动写一个无参的构造方法进去。

在低版本中转换的时候会直接抛以上异常信息(测试版本:fastjson-1.1.12)。但是高版本(fastjson-1.2.58)就不会报错。
建议在定义javabean时都把无参和有参定义。文章来源地址https://www.toymoban.com/news/detail-407503.html

到了这里,关于fastjson详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (新手必看)自定义数据传输通信协议+STM32代码详解

           本篇博客主要学习和了解一些单片机协议的格式,在对传输大数据或者要求准确性的时候,都需要通过协议来发送接收,下面通过了解协议的基本构成和代码来分析和实现协议的发送和接收。本篇博客大部分是自己收集和整理,如有侵权请联系我删除。 本次博客开发

    2024年02月03日
    浏览(37)
  • 通信协议详解(二):IIC总线协议(传输时序+数据格式+设计实现)

        IIC(Inter-Integrated Circuit)是一种具有两线传输的串行通信总线,使用多主从架构,由飞利浦公司在1980年为了让主板、嵌入式系统或手机连接低速周边设备而提出,适用于数据量不大且传输距离短的场合。     IIC串行总线由两根信号线组成,一根是双向的 数据线

    2024年02月04日
    浏览(45)
  • 详解TCP/IP协议第三篇:通信数据在OSI通信模型的上下传输

    😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824   📚📚  工作微信:BigTreeJava 拉你进微信群,免费领取! 🍎🍎4:本文章内容出自上述:Spring应用课程!💞💞

    2024年02月09日
    浏览(34)
  • 【数据加密、解密】前后端数据传输的过程中,如何进行数据加密传输,保证数据的传输安全,防止被他人窃取

       前端进行参数传递的时候 ,有些数据为了安全起见还是需要加密传输的,比如用户密码,比如登录的时候,注册的时候,用户输入的密码,如果明文进行传输还是不太安全的,所以一般可以进行加密后传递到后端。 那么就有这几个问题: ·前端如何进行加密 ·后端如何进

    2024年02月07日
    浏览(39)
  • 如何通过安全数据传输平台,保护核心数据的安全传输?

    在数字化的浪潮中,企业的数据安全传输显得尤为关键。随着网络攻击手段的日益复杂,传统的数据传输方式已不再安全,这就需要我们重视并采取有效的措施,通过安全数据传输平台来保护核心数据。 传统的数据传输面临的主要问题包括: 1.网络带宽限制:企业的网络带宽

    2024年04月28日
    浏览(31)
  • 数据传输安全不达标:数据传输安全措施未达到行业标准

    引言 近年来随着信息技术的快速发展与普及应用, 企业、政府及个人的信息安全问题日益凸显出来; 其中数据安全是当前网络安全的焦点之一.本文针对数据传输安全问题进行分析并提出相应的解决方法来保障企业、个人等的数据安全性. 数据传输安全的定义和特点 **数据的完

    2024年02月02日
    浏览(45)
  • oracle 19c容器数据库data dump数据泵传输数据(4)---网络传输

    Transporting a Database Over the Network: Example 这个的方式导入可以不需要传输dmp文件,我原本是想从11g导入到pdb2的,但是因为版本的原因,就直接实验从pdb1导入到pdb2吧。 这种方式和前面完全传输的方式类似,不需要事先在目标数据库创建相同的表空间,而且不也不用有导出数据文

    2024年01月18日
    浏览(42)
  • C#蓝牙连接及传输数据的三种方式(蓝牙传输文件、二进制数据)

          先下载InTheHand.Net.Personal.dll并在C#中引用,这个需要在网上下载      先看界面            这种方式优点是稳定性较强,基本无错误,就是偶尔需要提前蓝牙配对。        这种方式直接与蓝牙设备进行配对的时候会报错,请求的地址无效,这时候需要在被检测的蓝牙

    2024年02月11日
    浏览(63)
  • BLE Mesh蓝牙mesh传输大数据包传输文件照片等大数据量通讯

    1、BLE Mesh数据传输现状          BLE Mesh网络技术是低功耗蓝牙的一个进阶版,Mesh扩大了蓝牙在应用中的规模和范围,因为它同时支持超过三万个网络节点,可以跨越大型建筑物,不仅可以使得医疗健康应用更加方便快捷,还能监测像学校这类的大型公共场所随时监测学生的

    2024年02月08日
    浏览(33)
  • 数据通信——传输层TCP(可靠传输原理的ARQ)

    上一篇讲述了停止等待协议的工作流程,在最后提到了ARQ自动请求重传机制。接下来,我们就接着上一篇的篇幅,讲一下ARQ这个机制 还是这个图来镇楼  发送端对出错的数据帧进行重传是自动进行的,因而这种差错控制体制常简称为ARQ(Automatic Repeat reQuest),直译是自动重传请

    2024年02月10日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包