fastJSON简单使用


fastJSON简单使用

1.1 首先创建一个类

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {
    private String name;
    private int age;
}

1.2 将Java对象转Json

public class Main {
    public static void main(String[] args) {
        User user = new User("刘华强",22);
        String s = JSON.toJSONString(user);
        System.out.println(s);
    }
}
/*
{"age":22,"name":"刘华强"}
*/

1.2.1 实体类加注解,自定义key

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {
    @JSONField(name = "NAME")
    private String name;
    @JSONField(name = "AGE")
    private int age;
}

/*
{"AGE":22,"NAME":"刘华强"}
*/

1.2.2 列表转Json

public class Main {
    public static void main(String[] args) {
        User user1 = new User("AAA", 1);
        User user2 = new User("BBB", 2);
        ArrayList<User> list = new ArrayList<>();
        list.add(user1);
        list.add(user2);
        String s = JSON.toJSONString(list);
        System.out.println(s);
    }
}
/*
[
    {"AGE":1,"NAME":"AAA"},
    {"AGE":2,"NAME":"BBB"}
]
*/

1.2.3 更多注解

我们还可以自定义输出,并控制字段的排序,日期显示格式,序列化标记等。

  1. serialize 指定序列化
  2. ordinal 显示顺序
  3. format 时间格式化

让我们更新实体类的属性

public class User {
    @JSONField(name = "NAME", ordinal = 2)
    private String name;

    @JSONField(name = "AGE", ordinal = 3)
    private int age;

    @JSONField(name = "生日", ordinal = 1, format = "dd/MM/yyyy")
    private Date birthday;

    @JSONField(name = "成绩", ordinal = 4, serialize = false)
    private Integer score;
}

测试

public class Main {
    public static void main(String[] args) {
        User user = new User("AA", 22, new Date(),100);
        System.out.println(JSON.toJSONString(user));
    }
}
/*
{"生日":"20/01/2021","NAME":"AA","AGE":22}
*/

注意:FastJson 在进行操作时,是根据 getter 和 setter 的方法进行的,并不是依据 Field 进行。

注意:若属性是私有的,必须有 set 方法。否则无法反序列化。

@JSONField注解

public @interface JSONField {
    // 配置序列化和反序列化的顺序,1.1.42版本之后才支持
    int ordinal() default 0;

     // 指定字段的名称
    String name() default "";

    // 指定字段的格式,对日期格式有用
    String format() default "";

    // 是否序列化
    boolean serialize() default true;

    // 是否反序列化
    boolean deserialize() default true;
}
System.out.println(JSON.toJSONString(user, SerializerFeature.BeanToArray)); //反序列化
/*
["20/01/2021","AA",22]
*/

1.3 String转Java对象

1.3.1 parseObject(String类型的字符串 , 转换类的class对象 )

public class Main {
    public static void main(String[] args) {
        User user = new User("AA", 22, new Date(),100);
        String userStr = JSON.toJSONString(user);
        User user1 = JSON.parseObject(userStr, User.class);
        System.out.println(user1);
    }
}
/*
User(name=AA, age=22, birthday=Wed Jan 20 00:00:00 CST 2021, score=null)
*/

@JSONField deserialize 可选项可以指定字段不反序列化。

@JSONField(name = "AGE", ordinal = 3,deserialize = false)
private int age;

User(name=AA, age=0, birthday=Wed Jan 20 00:00:00 CST 2021, score=null)

1.3.2 JSON对象转Object

JSON类似于Map,拥有key 和value -> (JSONObject)

public class Main {
    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("AGE",22);
        jsonObject.put("NAME","AA");
        jsonObject.put("生日","2016/12/12 12:12:12");
        jsonObject.put("成绩",100);
        String string = JSON.toJSONString(jsonObject);
        System.out.println(string);
        User user = JSON.parseObject(string, User.class);
        System.out.println(user);
    }
}

/*
User(name=AA, age=0, birthday=Wed Jun 08 00:00:00 CST 18, score=100)
*/

列表的JSON对象 (JSONArray) -> JSON.parseArray

public class Main {
    public static void main(String[] args) {
        JSONArray json = new JSONArray();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("AGE",22);
        jsonObject.put("NAME","AA");
        jsonObject.put("生日","2016/12/12 12:12:12");
        jsonObject.put("成绩",100);
        json.add(jsonObject);
        String string = JSON.toJSONString(json);
        System.out.println(string);
        List<User> users = JSON.parseArray(string, User.class);
        System.out.println(users);
    }
}
/*
[{"成绩":100,"生日":"2016/12/12 12:12:12","AGE":22,"NAME":"AA"}]
[User(name=AA, age=0, birthday=Wed Jun 08 00:00:00 CST 18, score=100)]
*/

够用就行!!!!


文章作者: anlen123
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 anlen123 !
 上一篇
对一次redis搭建集群的记录 对一次redis搭建集群的记录
对一次redis搭建集群的记录1. 使用docker 搭建两个redis 节点1.1 创建自定义docker网络docker network create --driver=bridge --subnet=192.168.0.0/16 --
2021-01-26 anlen123
下一篇 
Ajax Ajax
Ajax导入jquery 下载连接 https://mp.weixin.qq.com/s/tB4YX4H59wYS6rxaO3K2_g AJAX = Asynchronous JavaScript and XML(异步的 JavaScri
2021-01-14 anlen123
  目录