JSON之FastJson开发库

JSON介绍

JSON(javaScript Object Notation)是一种轻量级的数据交换格式。

主要采用键值对({"name": "json"})的方式来保存和表示数据,作为前后端数据交换所用。 

JSON是JS对象的字符串表示法,它使用文本表示一个JS对象的信息,本质上是一个字符串。更多简介见介绍JSON

JSON取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度

json形式及语法

1、JSON对象 

{
	"ID": 1001,
	"name": "张三",
	"age": 24
}
  1. 数据在花括号中
  2. 数据以"键:值"对的形式出现(其中键多以字符串形式出现,值可取字符串,数值,甚至其他json对象)
  3. 每两个"键:值"对以逗号分隔(最后一个"键:值"对省略逗号)

遵守上面3点,便可以形成一个json对象。

2、JSON对象数组

[
	{"ID": 1001, "name": "张三", "age": 24},
	{"ID": 1002, "name": "李四", "age": 25},
	{"ID": 1003, "name": "王五", "age": 22}
]
  1. 数据在方括号中(可理解为数组)
  2. 方括号中每个数据以json对象形式出现
  3. 每两个数据以逗号分隔(最后一个无需逗号)

遵守上面3点,便可形成一个json对象数组(及一个数组中,存储了多个json对象)

理解了上面两种基本的形式,我们就可以得出其他的数据形式,例如下面这个:

{
	"部门名称":"研发部",
	"部门成员":[
	{"ID": 1001, "name": "张三", "age": 24},
	{"ID": 1002, "name": "李四", "age": 25},
	{"ID": 1003, "name": "王五", "age": 22}],
	"部门位置":"xx楼21号"
}

 3、JSON字符串

JSON字符串也是在平时开发中使用较多的,json字符串应满足以下条件:

1:它必须是一个字符串,由" "或者' '包裹数据,支持字符串的各种操作

2:里面的数据格式应该要满足其中一个格式,可以是json对象,也可以是json对象数组或者是两种基本形式的组合变形。

总结:json可以简单的分为基本形式:json对象,json对象数组。两种基本格式组合变形出其他的形式,但其本质还是json对象或者json对象数组中的一种。json对象或对象数组可以转化为json字符串,使用于不同的场合。

注意点:在封装json数据的时候,很容易出现错误,比如粗心的在最后一条数据的末尾加上了逗号等等,这里我提供一个在线验证工具,方便大家验证json数据格式的正确性

http://www.bejson.com/
 

FastJson简介

fastjson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。除了这个fastjson以外,还有Google开发的Gson包,其他形式的如net.sf.json包,都可以实现json的转换。方法名称不同而已,最后的实现结果都是一样的。

官方开源地址:https://github.com/alibaba/fastjson

maven依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>

一、FastJson 常用 API

1、JSON对象

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

主要的API是JSON.toJSONStringJSON.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);
}

序列化:Object-->String

String jsonString = JSON.toJSONString(obj);

反序列化:String-->Object

VO vo = JSON.parseObject("...", VO.class);

泛型反序列化:

import com.alibaba.fastjson.TypeReference;

List<VO> list = JSON.parseObject("...", new TypeReference<List<VO>>() {});

 注意:

  • JSONArray : 相当于List
  • JSONObject: 相当于Map<String,Object>
// JSON文本parse为JSONObject或者JSONArray
public static final Object parse(String text);  
// JSON文本parse成JSONObject
public static final JSONObject parseObject(String text);  
// JSON文本parse为JavaBean   
public static final <T> T parseObject(String text, Class<T> clazz); 
// JSON文本parse成JSONArray
public static final JSONArray parseArray(String text);  
// JSON文本parse成JavaBean集合 
public static final <T> List<T> parseArray(String text, Class<T> clazz); 

// JavaBean序列化为JSON文本 
public static final String toJSONString(Object object); 
// JavaBean序列化为带格式的JSON文本 
public static final String toJSONString(Object object, boolean prettyFormat); 
// JavaBean转换为JSONObject或者JSONArray
public static final Object toJSON(Object javaObject); 

使用实例

parse POJO

import com.alibaba.fastjson.JSON;

//将JSON文本转换为java对象
Model model = JSON.parseObject(jsonStr, Model.class);

parse Tree

import com.alibaba.fastjson.*;

JSONObject jsonObj = JSON.parseObject(jsonStr);

parse POJO Generic

import com.alibaba.fastjson.JSON;

Type type = new TypeReference<List<Model>>() {}.getType(); 
List<Model> list = JSON.parseObject(jsonStr, type);

convert POJO to json string

import com.alibaba.fastjson.JSON;

Model model = ...; 
String jsonStr = JSON.toJSONString(model);

convert POJO to json bytes

import com.alibaba.fastjson.JSON;

Model model = ...; 
byte[] jsonBytes = JSON.toJSONBytes(model);

write POJO as json string to OutputStream

import com.alibaba.fastjson.JSON;

Model model = ...; 
OutputStream os;
JSON.writeJSONString(os, model);

write POJO as json string to Writer

import com.alibaba.fastjson.JSON;

Model model = ...; 
Writer writer = ...;
JSON.writeJSONString(writer, model);

2、JSONObject 对象

JSONObject json=new JSONObject();
json.put("type","add");
json.put("desc","添加用户");
json.put("content",userBean);
String s=json.toJSONString();
发布了69 篇原创文章 · 获赞 43 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/fox_bert/article/details/98503133