在Java中JSON解析工具Gson和FastJson的使用

1 篇文章 0 订阅

一.导入jar包(fastjson和gson)(IDEA中实现)

从官网下载jar包:

fastjson下载网址:https://github.com/alibaba/fastjson
在这里插入图片描述
gson下载网址:https://github.com/google/gson
在这里插入图片描述

在项目中导入下载的jar包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样相当于新建了一个类库,可以在项目中使用Gson和FastJson工具类了.

二.FastJson的使用:

下面用到的类:

class Food{
        private String name,info;
        private double price[];

        public Food(String name, String info, double... price) {
            this.name = name;
            this.info = info;
            this.price = price;
        }

        public Food() {
        }

        public String getName() {
            return name;
        }

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

        public String getInfo() {
            return info;
        }

        public void setInfo(String info) {
            this.info = info;
        }

        public double[] getPrice() {
            return price;
        }

        public void setPrice(double... rice) {
            this.price = price;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Food food = (Food) o;
            return Objects.equals(name, food.name);
        }

        @Override
        public int hashCode() {
            return Objects.hash(name);
        }

        @Override
        public String toString() {
            return "Food{" +
                    "name='" + name + '\'' +
                    ", info='" + info + '\'' +
                    ", price=" + price.toString()+
                    '}';
        }

    }

1.将对象转换为JSON字符串:

public class FastJsonTest {
    public static void main(String[] args) {
        Food food = new Food("番茄炒蛋","家常菜",2.5,3.0,3.5);
        //1.这里直接使用JSON内的静态方法将类的实例化对象转化为Json字符串
        String str = JSON.toJSONString(food);
        System.out.println(str);
    }
}

结果:
在这里插入图片描述
注意:这里结果键值对的键怎么来?方法通过反射找到了food这个实例对象中的所有get方法.比如getName()方法,结果的键"name"就是通过去掉方法名的get和将Name小写化得到的,那么值就是通过对象的getName()方法得到的.
所以就有了缺点:在实例对象方法中如果有方法名(自己创建的方法)是满足get+(首字母大写)???()的,那么转化为JSON字符串是会转换出多余代码:
如:我在Food类中加多一个方法:

public String  getHaha() {
         return "我是多余数据!";
     }

那么结果会变成:
在这里插入图片描述

2.将JSON字符串转换为对象:

String str1 = "{\"name\":\"番茄炒蛋\",\"info\":\"家常菜\",\"price\":[2.5,3.0,3.5]}";
        Food food1 = JSON.parseObject(str1, Food.class);
        System.out.println(food1.getName());

结果:
在这里插入图片描述

当JSON字符串里包含多个对象,可以使用这个方法:
List<类型> list=JSON.parseArray(JSON字符串,类型.class);

注意:
1.这里Food类如果是内部类就必须声明为静态内部类.
2.这里是通过类中的set方法和无参构造器来实现的,首先使用无参构造器创建了一个实例化对象,再通过set方法来赋值.赋值原理和方法名有关,转换时会将JSON字符串的键取出,如name,先将name变成Name,然后在所有的set方法里找.
如果把Food中的方法名setName()改为setname(),那么name的数据因找不到匹配项而自动忽略,属性name就不会被赋值,但不会报错.

三.Gson的使用:

1.将对象转换为JSON字符串:

public class GsonTest {
    public static void main(String[] args) {
    	//1.创建Gson对象
        Gson gson = new Gson();
        Food food = new Food("番茄炒蛋","家常菜",2.5,3.0,3.5);
        //2.在Tojson方法内传入类的实例化
        String str = gson.toJson(food);
        System.out.println(str);
        
    }
}

结果:
在这里插入图片描述
这里Gson与FastJson的转换原理并不一样,不是依靠方法名,原理后续更新…

2.将JSON字符串转换为对象:

String str ="\"{\"name\":\"番茄炒蛋\",\"info\":\"家常菜\",\"price\":[2.5,3.0,3.5]}\"";
Gson gson = new Gson();
Food food = gson.fromJson(str,Food.class);
System.out.println(food.getName());

结果:
在这里插入图片描述
注意:
1.这里Food类如果是内部类就必须声明为静态内部类.
2.这里与FastJson的转换原理并不一样,不是依靠方法名,原理后续更新…

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GG非常废

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值