FastJSON解析----FastJson的JSON类相关方法

一、FastJson的主要入口

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

//序列化

public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 
public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray。
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的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 JSONArray parseArray(String text); // 把JSON文本parse成JSONArray    
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean 
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 

二、有关类库的说明  

SerializeWriter:相当于StringBuffer。

JSONArray:相当于List<Object>。

JSONObject:相当于Map<String, Object>。

JSON反序列化没有真正数组,本质类型都是List<Object>。JSONArray和JSONObject都继承了JSON类,所以,才会说JSON类是主要入口。

三、测试

基础类

@Data
public class User {
    @JSONField(ordinal = 2 )
    private String name;

    @JSONField(ordinal = 3 , format = "yyyy-MM-dd HH:mm:ss")
    private Date birthDay;

    @JSONField(ordinal = 1 )
    private Integer age;
}

--------------------------------

@Data
public class Group {
    private String groupName;

    private List<User> userList = new ArrayList<User>();
}
  • JavaBean对象与JSONStr的相互转换
    @Test
    public void beanAndJsonStr(){
        User user = new User();
        user.setName("zhangsan");
        user.setAge(10);
        user.setBirthDay(new Date());
        System.out.println("beanToJsonStr");
        String userJsonStr = JSON.toJSONString(user);
        System.out.println(userJsonStr);
        System.out.println("JsonStrToBean");
        User user1 = JSON.parseObject(userJsonStr, User.class);
        System.out.println(user1);
    }
//结果:
beanToJsonStr
{"age":10,"name":"zhangsan","birthDay":"2018-11-06 10:51:11"}
JsonStrToBean
User(name=zhangsan, birthDay=Tue Nov 06 10:51:11 CST 2018, age=10)
  •  JavaBean对象与JSONObj的相互转换
    @Test
    public void beanAndJsonObj(){
        User user = new User();
        user.setName("zhangsan");
        user.setAge(10);
        user.setBirthDay(new Date());
        System.out.println("beanToJsonObj");
        JSONObject userJsonObj = (JSONObject)JSON.toJSON(user);
        System.out.println(userJsonObj);
        System.out.println("JsonToBeanObj");
        User user1 = JSON.parseObject(userJsonObj.toString(), User.class);
        System.out.println(user1);
    }
//结果:
beanToJsonObj
{"birthDay":1541473800956,"name":"zhangsan","age":10}
JsonToBeanObj
User(name=zhangsan, birthDay=Tue Nov 06 11:10:00 CST 2018, age=10)

这里需要注意,如果JSONObj需要转换成javaBean,那么需要先将JSONObj转换成字符串(调用JSONObject的toString方法),然后再将字符串反序列化成JavaBean对象。

  • List与JSONStr的相互转换
@Test
public void listAndJsonStr(){
    List<User> userList = new ArrayList<User>();
    User user = new User();
    user.setName("zhangsan");
    user.setAge(10);
    user.setBirthDay(new Date());
    User user2 = new User();
    user2.setName("lisi");
    user2.setAge(11);
    user2.setBirthDay(new Date());
    userList.add(user);
    userList.add(user2);
    System.out.println("listToJsonStr");
    String userListJsonStr = JSON.toJSONString(userList);
    System.out.println(userListJsonStr);
    System.out.println("JsonStrToList");
    List<User> list = JSON.parseArray(userListJsonStr, User.class);
    System.out.println(list);
}

//结果:

[{"age":10,"name":"zhangsan","birthDay":"2018-11-06 20:32:52"},{"age":11,"name":"lisi","birthDay":"2018-11-06 20:32:52"}]
JsonStrToList
[User(name=zhangsan, birthDay=Tue Nov 06 20:32:52 CST 2018, age=10), User(name=lisi, birthDay=Tue Nov 06 20:32:52 CST 2018, age=11)]
  • List与JSONObj的相互转换
    @Test
    public void listAndJsonObj(){
        List<User> userList = new ArrayList<User>();
        User user = new User();
        user.setName("zhangsan");
        user.setAge(10);
        user.setBirthDay(new Date());
        User user2 = new User();
        user2.setName("lisi");
        user2.setAge(11);
        user2.setBirthDay(new Date());
        userList.add(user);
        userList.add(user2);
        System.out.println("listToJsonObj");
        JSONArray userListJsonObj = (JSONArray)JSON.toJSON(userList);
        System.out.println(userListJsonObj);
        System.out.println("JsonObjToList");
        List<User> list = JSON.parseArray(userListJsonObj.toString(), User.class);
        System.out.println(list);
    }
//结果:
listToJsonObj
[{"birthDay":1541508280432,"name":"zhangsan","age":10},{"birthDay":1541508280432,"name":"lisi","age":11}]
JsonObjToList
[User(name=zhangsan, birthDay=Tue Nov 06 20:44:40 CST 2018, age=10), User(name=lisi, birthDay=Tue Nov 06 20:44:40 CST 2018, age=11)]
  • map与JSONStr的相互转换
    @Test
    public void mapAndJsonStr(){
        Map<String,User> map = new HashMap<String,User>();
        User user = new User();
        user.setName("zhangsan");
        user.setAge(10);
        user.setBirthDay(new Date());
        User user2 = new User();
        user2.setName("lisi");
        user2.setAge(11);
        user2.setBirthDay(new Date());
        map.put("用户1",user);
        map.put("用户2",user2);
        System.out.println("mapToJsonStr");
        String mapStr = JSON.toJSONString(map);
        System.out.println(mapStr);
        System.out.println("JsonStrToMap");
        Map map3 = JSON.parseObject(mapStr);
        //JSONObject map3 = JSON.parseObject(mapStr);
        Map<String,User> map2 = (Map<String,User>)JSON.parse(mapStr);
        //JSONObject map2  = (JSONObject)JSON.parse(mapStr);
        for (Object str:map3.keySet()) {
            System.out.println(map2.get(str));
        }
    }
//结果:
mapToJsonStr
{"用户2":{"age":11,"name":"lisi","birthDay":"2018-11-06 20:47:31"},"用户1":{"age":10,"name":"zhangsan","birthDay":"2018-11-06 20:47:31"}}
JsonStrToMap
{"birthDay":"2018-11-06 20:47:31","name":"lisi","age":11}
{"birthDay":"2018-11-06 20:47:31","name":"zhangsan","age":10}

 Map map3 = JSON.parseObject(mapStr);

JSONObject map3 = JSON.parseObject(mapStr);

Map<String,User> map2 = (Map<String,User>)JSON.parse(mapStr);

JSONObject map2 = (JSONObject)JSON.parse(mapStr);

当时map的时候,JSON.parseObject(mapStr)和JSON.parse(mapStr)返回的类型不一样,这是因为JSONObject类实现了Map<String, Object>接口,可参考JSONObject源码。

同理,JSONArray实现了 List<Object>接口。

map和JSONObj的相互转换,Array和JSONStr以及JSONObji的相互转换,都和上述的一样,所以在此就不陈述了。

四、总结

Java对象序列化成字符串,都可以用JSON.toString()方法。

字符串反序列化成Java对象时

    如果是JavaBean,则可用JSON.parseObject(String text , Class<T> clazz)方法。

    如果是数组(Array或者List),则可用JSON.parseArray(String text , Class<T> clazz)方法。

    如果是Map,则可用JSON.parse(String text)或者JSON.parseObject(String text)方法。

如果Java对象需要转成JSON对象,则可用JSON.toJSON(Object javaObject)方法,将JavaBean转成JSONObject或者JSONArray。

如果字符串需要反序列成JSON对象,分两种情况:

    如果是数组,则可用JSON.parseArray(String text)或者JSON.parse(String text)方法,把JSON字符串parse成JSONArray。

    如果是Java对象,则可用JSON.parseObject(String text)或者JSON.parse(String text),把JSON字符串parse成JSONObject。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值