[TOC]
一、JSON介紹
JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。
它基於ECMAScript的一個子集。 JSON採用完全獨立於語言的文字格式,但是也使用了類似於C語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的資料交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成(一般用於提升網路傳輸速率)。
二、jSON結構
json簡單說就是javascript中的物件和陣列,所以這兩種結構就是物件和陣列兩種結構,通過這兩種結構可以表示各種複雜的結構。
1、物件:物件在js中表示為“{}”括起來的內容,資料結構為 {key:value,key:value,...}的鍵值對的結構,在物件導向的語言中,key為物件的屬性,value為對應的屬性值,所以很容易理解,取值方法為 物件.key 獲取屬性值,這個屬性值的型別可以是 數字、字串、陣列、物件幾種。
2、陣列:陣列在js中是中括號“[]”括起來的內容,資料結構為 ["java","javascript","vb",...],取值方式和所有語言中一樣,使用索引獲取,欄位值的型別可以是 數字、字串、陣列、物件幾種。
JSON的資料格式的介紹 {“id”:1,”name”:aaa} [{“id”:1,”name”:aaa},{“id”:2,”name”:bbb}] { “city”:{“cid”:1,”cname”:”xxx”} }
三、Java中json工具介紹
Jsonlib簡單使用介紹
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;
import net.sf.json.xml.XMLSerializer;
/**
* 處理json資料格式的工具類
*/
public class JsonUtil {
/**
* 將陣列轉換成String型別的JSON資料格式
*
* @param objects
* @return
*/
public static String array2json(Object[] objects){
JSONArray jsonArray = JSONArray.fromObject(objects);
return jsonArray.toString();
}
/**
* 將list集合轉換成String型別的JSON資料格式
*
* @param list
* @return
*/
public static String list2json(List list){
JSONArray jsonArray = JSONArray.fromObject(list);
return jsonArray.toString();
}
/**
* 將map集合轉換成String型別的JSON資料格式
*
* @param map
* @return
*/
public static String map2json(Map map){
JSONObject jsonObject = JSONObject.fromObject(map);
return jsonObject.toString();
}
/**
* 將Object物件轉換成String型別的JSON資料格式
*
* @param object
* @return
*/
public static String object2json(Object object){
JSONObject jsonObject = JSONObject.fromObject(object);
return jsonObject.toString();
}
/**
* 將XML資料格式轉換成String型別的JSON資料格式
*
* @param xml
* @return
*/
public static String xml2json(String xml){
JSONArray jsonArray = (JSONArray) new XMLSerializer().read(xml);
return jsonArray.toString();
}
/**
* 除去不想生成的欄位(特別適合去掉級聯的物件)
*
* @param excludes
* @return
*/
public static JsonConfig configJson(String[] excludes) {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(excludes);
jsonConfig.setIgnoreDefaultExcludes(true);
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
return jsonConfig;
}
}
複製程式碼
Fastjson簡單使用介紹
import java.util.Date;
import com.alibaba.fastjson.annotation.JSONField;
public class User {
private int id;
private String name;
private int age;
@JSONField(format="yyyy-MM-dd")
private Date birthday;
/*
get/set方法
*/
}
複製程式碼
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.junit.Test;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.PropertyFilter;
import com.alibaba.fastjson.serializer.SerializeFilter;
import cn.itheima.domain.User;
public class FastjsonTest {
// 將User物件轉換成json
@Test
public void test1() {
User user = new User();
user.setAge(20);
user.setBirthday(new Date());
user.setId(1);
user.setName("tom");
// 處理屬性在json中是否生成
SerializeFilter filter = new PropertyFilter() {
@Override
public boolean apply(Object arg0, String arg1, Object arg2) {
// System.out.println(arg0); //要轉換成json的物件
// System.out.println(arg1); //屬性名稱
// System.out.println(arg2); //屬性值
if (arg1.equals("id")) {
return false; // 代表不生成在json串中
}
return true; // 代表生成在json串中
}
};
// 轉換成json
String json = JSONObject.toJSONString(user, filter);
System.out.println(json);
// {"age":20,"birthday":2018-04-09,"id":1,"name":"tom"}
}
// 將List<User>轉換成json
@Test
public void test2() {
User u1 = new User();
u1.setAge(20);
u1.setBirthday(new Date());
u1.setId(1);
u1.setName("tom");
User u2 = new User();
u2.setAge(20);
u2.setBirthday(new Date());
u2.setId(1);
u2.setName("fox");
List<User> users = new ArrayList<User>();
users.add(u1);
users.add(u2);
String json = JSONArray.toJSONString(users);
System.out.println(json);
// [{"age":20,"birthday":1479456003742,"id":1,"name":"tom"},{"age":20,"birthday":1479456003742,"id":1,"name":"fox"}]
}
}
複製程式碼
//物件轉Json
String json = JSONObject.toJSONString(user,filter)
//Json轉物件
User parseObject = JSONObject.parseObject(json,User.class);
複製程式碼
Jackson簡單使用介紹
import java.util.Date;
import org.apache.struts2.json.annotations.JSON;
//@JsonIgnoreProperties({ "id", "releaseDate" })
//@JsonFilter("productFilter")
public class Product {
// @JsonIgnore
private int id;
private String name;
private double price;
// @JsonIgnore
private Date releaseDate;// 出生日期
/*
get/set方法
*/
}
複製程式碼
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.ser.FilterProvider;
import org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter;
import org.codehaus.jackson.map.ser.impl.SimpleFilterProvider;
import org.junit.Test;
import cn.itheima.domain.Product;
public class JacksonTest {
// 將Product轉換成json
@Test
public void test1() throws JsonGenerationException, JsonMappingException, IOException {
Product p = new Product();
p.setId(1);
p.setName("電視機");
p.setPrice(2000);
p.setReleaseDate(new Date());
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd")); // 設定日期格式化器
String json = mapper.writeValueAsString(p);
System.out.println(json);
}
// 將List<Product>轉換成json
@Test
public void test2() throws JsonGenerationException, JsonMappingException, IOException {
Product p1 = new Product();
p1.setId(1);
p1.setName("電視機");
p1.setPrice(2000);
Product p2 = new Product();
p2.setId(2);
p2.setName("電冰箱");
p2.setPrice(3000);
List<Product> ps = new ArrayList<Product>();
ps.add(p1);
ps.add(p2);
ObjectMapper mapper = new ObjectMapper();
// 處理過濾屬性
// FilterProvider fp = new SimpleFilterProvider().addFilter("productFilter",
// SimpleBeanPropertyFilter.filterOutAllExcept("id", "name")); //只包含id與name
FilterProvider fp = new SimpleFilterProvider().addFilter("productFilter",
SimpleBeanPropertyFilter.serializeAllExcept("id", "name")); //不包含id與name
mapper.setFilters(fp);
String json = mapper.writeValueAsString(ps);
System.out.println(json);
}
}
複製程式碼