转载http://blog.csdn.net/hongwangzhang/article/details/51260879html
在日志解析,先后端数据传输交互中,常常会遇到 String 与 map、json、xml 等格式相互转换与解析的场景,其中 json 基本成为了跨语言、跨先后端的事实上的标准数据交互格式。应该来讲各个语言中 解析 json 的库都一大片(具体 json 格式与三方库的介绍请见: http://www.json.org/json-zh.html ),好比 Python 都集成在了内置库中,成为标准 API,今天咱们要聊的是 Java 中如何方便的使用 json 格式。java
从上面的连接介绍中咱们能够看到,java 的三方 json 库是最多的,可谓百花齐放百家争鸣的节奏。。。可是,某些库存在链式依赖的问题,使用的时候要注意,若是你没用 maven 管你你的依赖,用起来会很痛苦,好比 json-lib、smart-json 等。下面我要推荐的是阿里巴巴工程师开源的一个 json 库:FastJSON,这个库在解析速度和易用性上来讲都很不错。 python
1.1 Fastjson介绍git
Fastjson是一个Java语言编写的JSON处理器。
一、遵循 http://json.org 标准,为其官方网站收录的参考实现之一。
二、功能qiang打,支持JDK的各类类型,包括基本的JavaBean、Collection、Map、Date、Enum、泛型。
三、无依赖,不须要例外额外的jar,可以直接跑在JDK上。
四、开源,使用Apache License 2.0协议开源。github
1.2 若是得到Fastjson?
https://github.com/alibaba/fastjsonjson
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。
SerializeWriter:至关于StringBuffer数组
JSONArray:至关于List<Object>ruby
JSONObject:至关于Map<String, Object>app
JSON反序列化没有真正数组,本质类型都是List<Object>
好比支持注解、支持全类型序列化,这些都是很好的特性,功能强大,不在本次测试范围。
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; } public boolean isVboolean() {