JSON是工作中经常会遇到的一种数据结构,下面来讲讲与他相关的一些知识点。
JSON简介:
JSON: JavaScript Object Notation(JavaScript 对象表示法)
JSON 是存储和交换文本信息的语法,类似 XML。
JSON 比 XML 更小、更快,更易解析。
JSONObject与JSONArray的使用:
Json有两种结构:JSONObject与JSONArray。
对象结构以”{”大括号开始,以”}”大括号结束
数组结构以”[”开始,”]”结束,中间以逗号区分,每一个逗号分割开一个对象。[{“1”,”2”},{“3”,”4”}],类似数据里面包了N个list或jsonobject。
类型的相互转化:
jsonobject转化成字符串:可以通过JSONObject.toJSONString方法
string转化为class对象:可以通过JSONObject.parseObject(str,xxDo.class)转换成DO的形式
string转化为jsonarray:
通过JSONObject.parseArray(str)转化为jsonarray类型,然后通过get(i)获取每个list。
string 转json:
JSONObject jsonObj = JSONObject.parseObject(jsonString);
fastjson简介及用法:
阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:
速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson;
功能强大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省;无依赖,能够直接运行在Java SE 5.0以上版本;支持Android、开源 。
引入依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.4</version>
</dependency>
fastjson支持序列化及反序列化:
序列化是指从java对象转换到json字符串格式过程。
反序列化只指从json字符串转换到java对象的过程。
核心都是调用以下列举的一些方法:
public static final JSONObject parseObject(String text);
// 把JSON文本转化成JSONObject
public static final T parseObject(String text, Class clazz);
// 把JSON文本转化为JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本转化成JSONArray
public static final List parseArray(String text, Class clazz);
//把JSON文本转化成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。
Demo:
/** 将JSON字符串转换为JSON对象 **/
JSONObject json = JSON.parseObject(text)
/** 将JSON字符串转换为JavaBean对象 **/
User user = JSON.parseObject(text, User.class)
/** 将JavaBean对象转换为JSON字符串 **/
String jsonObject = JSON.toJSONString(user);
jackson实现bean转成json语句
这里再介绍另一种方式实现bean转换json的方法,就是通过jackson的readValue方法。
ObjectMapper mapper = new ObjectMapper();
ActItemDO actItemDO = null;
try {
actItemDO = mapper.readValue(json, ActItemDO.class);
} catch (Exception e) {
e.printStackTrace();
}
不过,我觉得还是fastjson提供的方法用法简单点,这里提供另一种思路仅供参考。