常用Json工具類

smlxs_lbb發表於2018-04-09

[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);
	}

}
複製程式碼

相關文章