FastJSON 简介及其Map/JSON/String 互转

本文介绍了FastJSON,一个由阿里巴巴工程师开发的高性能Java JSON处理器。它遵循JSON标准,支持各种Java类型,如JavaBean、Collection、Map、Date、Enum等,并且无依赖,开源。文章提供了FastJSON的主要使用入口和示例代码,展示了其序列化和反序列化的功能。

转载http://blog.youkuaiyun.com/hongwangzhang/article/details/51260879

在日志解析,前后端数据传输交互中,经常会遇到 String 与 map、json、xml 等格式相互转换与解析的场景,其中 json 基本成为了跨语言、跨前后端的事实上的标准数据交互格式。应该来说各个语言中 解析 json 的库都一大片(具体 json 格式与三方库的介绍请见: http://www.json.org/json-zh.html ),比如 Python 都集成在了内置库中,成为标准 API,今天我们要聊的是 Java 中如何方便的使用 json 格式。

从上面的链接介绍中我们可以看到,java 的三方 json 库是最多的,可谓百花齐放百家争鸣的节奏。。。但是,某些库存在链式依赖的问题,使用的时候要注意,如果你没用 maven 管你你的依赖,用起来会很痛苦,比如 json-lib、smart-json 等。下面我要推荐的是阿里巴巴工程师开源的一个 json 库:FastJSON,这个库在解析速度和易用性上来说都很不错。  

1、了解fastjson

1.1 Fastjson介绍

Fastjson是一个Java语言编写的JSON处理器。 
1、遵循 http://json.org 标准,为其官方网站收录的参考实现之一。 
2、功能qiang打,支持JDK的各种类型,包括基本的JavaBean、Collection、Map、Date、Enum、泛型。 
3、无依赖,不需要例外额外的jar,能够直接跑在JDK上。 
4、开源,使用Apache License 2.0协议开源。

1.2 如果获得Fastjson? 
https://github.com/alibaba/fastjson

2、主要的使 用入口

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。

3、有关类库的一些说明

SerializeWriter:相当于StringBuffer

JSONArray:相当于List<Object>

JSONObject:相当于Map<String, Object>

JSON反序列化没有真正数组,本质类型都是List<Object>

4、fastjson还有很多很高级的特性

比如支持注解、支持全类型序列化,这些都是很好的特性,功能强大,不在本次测试范围。

5、测试代码

package lavasoft.stu.json; 

import com.alibaba.fastjson.JSON; 
import com.alibaba.fastjson.serializer.SerializeConfig; 
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; 

import java.util.*; 

/** * Created by IntelliJ IDEA. * * @author leizhimin 11-11-22 上午9:15 */ public class Foo {  private String vString = "vStringhehhehe";  private char vchar = 'x';  private byte vbyte = 64;  private short vshort = 128;  private int vint = 65535;  private long vlong = 9999999L;  private float vfloat = 12.1f;  private double vdouble = 22.203d;  private boolean vboolean = false; // private Date vdate = new Date();  private Date dddd = new Date();  private Date vDate = new Date();  private Date v_Date = new Date();  private Object vnull = null;  private String[] avString = {"aaa", "bbb", "ccc"};  private int[] avint = {1, 2, 3, 4};  private boolean[] avboolean = {true, false, true, true};  private List<String> listString = new ArrayList<String>();  private Map<String, String> map = new HashMap<String, String>();  private Bar bar = new Bar();  private Bar[] avBar = {new Bar(), new Bar()};  private List<Bar> listBar = new ArrayList<Bar>();  {   listString.add("listString1");   listString.add("listString2");   listString.add("listString3");   map.put("x", "s11111x");   map.put("y", "s22222y");   map.put("z", "s33333z");   listBar.add(new Bar());   listBar.add(new Bar());   listBar.add(new Bar());  }  public String getvString() {   return vString;  }  public void setvString(String vString) {   this.vString = vString;  }  public char getVchar() {   return vchar;  }  public void setVchar(char vchar) {   this.vchar = vchar;  }  public byte getVbyte() {   return vbyte;  }  public void setVbyte(byte vbyte) {   this.vbyte = vbyte;  }  public short getVshort() {   return vshort;  }  public void setVshort(short vshort) {   this.vshort = vshort;  }  public int getVint() {   return vint;  }  public void setVint(int vint) {   this.vint = vint;  }  public long getVlong() {   return vlong;  }  public void setVlong(long vlong) {   this.vlong = vlong;  }  public float getVfloat() {   return vfloat;  }  public void setVfloat(float vfloat) {   this.vfloat = vfloat;  }  public double getVdouble() {   return vdouble;  }  public void setVdouble(double vdouble) {   this.vdouble = vdouble;  } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值