JSON解析类库之Fastjson(1) --- Fastjson类库学习, 生成与解析json数据,json字符串与Java对象互转
来源:互联网 发布:网络歌手沫沫酱照片 编辑:程序博客网 时间:2024/05/17 04:38
2. fastjson主要的API哪些?
fastjson入口类是com.alibaba.fastjson.JSON,主要的API是JSON.toJSONString,和parseObject。
package com.alibaba.fastjson;public abstract class JSON { public static final String toJSONString(Object object); public static final <T> T parseObject(String text, Class<T> clazz, Feature... features);}
序列化:
基本序列化
序列化就是把JavaBean对象转化成JSON格式的文本。
String jsonString = JSON.toJSONString(obj);
反序列化:
VO vo = JSON.parseObject("...", VO.class);
泛型反序列化:
import com.alibaba.fastjson.TypeReference;List<VO> list = JSON.parseObject("...", new TypeReference<List<VO>>() {});
引用是通过"$ref"来表示的
使用@JSONField Annotation注解
在某些场景,你可能需要定制序列化输出,比如说,希望序列化之后采用"ID",而不是"id",你可以使用@JSONField这个Annotation。
public class User {
@JSONField(name="ID")
public int getId() { ... }
}
User user = ...;
JSON.toJSONString(user); // {"ID":234}
从json-lib中升级
如果你已经使用了json-lib,并且痛恨他蜗牛般的速度和罗嗦的API,建议你升级为fastjson,fastjson可以完全兼容json-lib的序列化格式。
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.JSONLibDataFormatSerializer;
import com.alibaba.fastjson.serializer.JSONSerializerMap;
import com.alibaba.fastjson.serializer.SerializerFeature;
private static final SerializeConfig config;
static {
config = new SerializeConfig();
config.put(java.util.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
private static final SerializerFeature[] features = {
SerializerFeature.WriteMapNullValue, // 输出空置字段
SerializerFeature.WriteNullListAsEmpty, // list字段如果为null,输出为[],而不是null
SerializerFeature.WriteNullNumberAsZero, // 数值字段如果为null,输出为0,而不是null
SerializerFeature.WriteNullBooleanAsFalse, // Boolean字段如果为null,输出为false,而不是null
SerializerFeature.WriteNullStringAsEmpty // 字符类型字段如果为null,输出为"",而不是null
};
// 序列化为和JSON-LIB兼容的字符串
public static String toCompatibleJSONString(Object object) {
return JSON.toJSONString(object, config, features);
}
通过上面代码中的toCompatibleJSONString方法,你就可以实现完全兼容json-lib了。
反序列化
反序列化就是把JSON格式的文本转化为Java Bean对象。
指定Class信息反序列化
通过指定类型信息,可以很方便的将"JSON文本"反序列化为"Java Bean"对象,例如:
String text = ...; // {"r":255,"g":0,"b":0,"alpha":255}
Color color = JSON.parseObject(text, Color.class);
类型集合的反序列化
这个接口类似于parseObject
String text = ...; // [{ ... }, { ... }]
List<User> users = JSON.parseArray(text, User.class);
泛型的反序列化
如果你需要返回一个带泛型的对象,例如List<User>、Map<String, User>,你可以使用TypeReference来传入类型信息。
String text = ...; // {"name":{"name":"ljw",age:18}}
Map<String, User> userMap = JSON.parseObject(text, new TypeReference<Map<String, User>>(){});
组合类型集合的反序列化
比如在网络协议中,经常会存在这样的组合:
[{/*header*/}, {/*body*/}]
fastjson对这种结构的反序列化有专门支持。
String text = ...; // [{/* header */}, {/* body */}]
Type[] types = new Type[]{Header.class, Body.class};
List<Object> list = JSON.parseArray(text, types);
Header header = (Header) list.get(0);
Body body = (Body) list.get(1);
使用@JSONCreator来指定构造函数来创建对象
如果你的JavaBean没有缺省构造函数,可以使用@JSONCreator来指定构造函数
public static class Entity {
private final int id; //应该用Integer才符合规范
private final String name;
@JSONCreator
public Entity(@JSONField(name = "id") int id, @JSONField(name = "name") String name){
this.id = id;
this.name = name;
}
public int getId() { return id; }
public String getName() { return name; }
}
把JSON文本反序列化为一个原型接口
public static interface Bean { //接口
int getId();
void setId(int value);
String getName();
void setName(String value);
}
String text = "{\"id\":123, \"name\":\"chris\"}";
Bean bean = JSON.parseObject(text, Bean.class);
// 按接口调用
Assert.assertEquals(123, bean.getId());
Assert.assertEquals("chris", bean.getName());
bean.setId(234);
Assert.assertEquals(234, bean.getId());
- JSON解析类库之Fastjson(1) --- Fastjson类库学习, 生成与解析json数据,json字符串与Java对象互转
- JSON解析类库之JSON-lib --- JSON-lib类库学习, 生成与解析json数据, json字符串与Java对象互转
- JSON解析类库之Jackson(1) --- Jackson类库学习, 生成与解析json数据,json字符串与Java对象互转
- Json数据解析之Fastjson
- fastjson解析json数据
- fastjson解析JSON数据
- fastJson解析Json数据
- fastjson解析json数据
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- Json解析之FastJson
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- bzoj1857: [Scoi2010]传送带
- Vue.js学习笔记:axios
- maven pom添加依赖,但是jar无法加入项目
- result_array()与row_array()
- androidwifi
- JSON解析类库之Fastjson(1) --- Fastjson类库学习, 生成与解析json数据,json字符串与Java对象互转
- 日月如梭,玩转JavaScript日期
- JSON 细微探究
- JAVA主线程
- LeetCode_452. Minimum Number of Arrows to Burst Balloons
- 袁芳的学习笔记(5)基于PredixUI的前端工程搭建
- [gif] 基于gif.h的gif文件生成
- java this关键字
- traing 3 暴力 SCU4440 Rectangle