JSON之FastJson与JackJson

本文介绍了使用FastJson和Jackson库进行Java对象到JSON字符串的序列化方法,包括单个对象及对象列表的序列化,并展示了如何通过配置过滤不需要显示的属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、FastJson

JSONUser
public class JsonUser {
	private int id;
	private String name;
	private int age;
	@JSONField(format="yyyy-MM-dd")//注解设定日期格式
	private Date birthday;
test1
@Test
	public void test1() {
		JsonUser user = new JsonUser();
		user.setId(1);
		user.setName("张三");
		user.setAge(20);
		user.setBirthday(new Date());
		
		String jsonString = JSONObject.toJSONString(user);
		System.out.println(jsonString);
	}
//{"age":20,"birthday":"2019-03-24","id":1,"name":"张三"}

test2(list方式)
@Test
	public void test2() {
		JsonUser user1 = new JsonUser();
		user1.setId(1);
		user1.setName("张三");
		user1.setAge(20);
		user1.setBirthday(new Date());
		JsonUser user2 = new JsonUser();
		user2.setId(2);
		user2.setName("李四");
		user2.setAge(23);
		user2.setBirthday(new Date());
		
		List<JsonUser> list = new ArrayList<JsonUser>();
		list.add(user1);
		list.add(user2);
		
		String jsonString = JSONArray.toJSONString(list);
		System.out.println(jsonString);
	}
//[{"age":20,"birthday":"2019-03-24","id":1,"name":"张三"},{"age":23,"birthday":"2019-03-24","id":2,"name":"李四"}]

不让某个属性显示在JSON中,过滤属性
@Test
	public void test3() {
		JsonUser user = new JsonUser();
		user.setId(1);
		user.setName("张三");
		user.setAge(20);
		user.setBirthday(new Date());
		
		//处理不让id显示在JSON中
		SerializeFilter serializeFilter = 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;
					
				} else {
					return true;
					
				}
				
			}
		};
		
		String jsonString = JSONObject.toJSONString(user,serializeFilter);
		System.out.println(jsonString);
	}

二、JackJson

test1
@Test
	public void test1() throws JsonGenerationException, JsonMappingException, IOException {
		JSONProduct product = new JSONProduct();
		product.setId(1);
		product.setName("电脑");
		product.setPrice(5000);
		
		ObjectMapper objectMapper = new ObjectMapper();
		String string = objectMapper.writeValueAsString(product);
		System.out.println(string);
	}
//{"id":1,"name":"电脑","price":5000}

test2(list方式)
@Test
	public void test2() throws JsonGenerationException, JsonMappingException, IOException {
		JSONProduct product1 = new JSONProduct();
		product1.setId(1);
		product1.setName("电脑");
		product1.setPrice(5500);
		JSONProduct product2 = new JSONProduct();
		product2.setId(2);
		product2.setName("手机");
		product2.setPrice(4500);
		
		ArrayList<JSONProduct> list = new ArrayList<JSONProduct>();
		list.add(product1);
		list.add(product2);
		
		ObjectMapper maper = new ObjectMapper();
		String string = maper.writeValueAsString(list);
		System.out.println(string);
	}
//[{"id":1,"name":"电脑","price":5500},{"id":2,"name":"手机","price":4500}]

处理过滤属性
JSONProduct
//@JsonIgnoreProperties({"name","price"})//不让多个属性出现在json中
@JsonFilter("productFilter") //注解命名
public class JSONProduct {
	//@JsonIgnore//不让某个属性出现在json中
	private int id;
	private String name;
	private int price;
test3:
@Test
	public void test3() throws JsonGenerationException, JsonMappingException, IOException {
		JSONProduct product1 = new JSONProduct();
		product1.setId(1);
		product1.setName("电脑");
		product1.setPrice(5500);
		JSONProduct product2 = new JSONProduct();
		product2.setId(2);
		product2.setName("手机");
		product2.setPrice(4500);
		
		ArrayList<JSONProduct> list = new ArrayList<JSONProduct>();
		list.add(product1);
		list.add(product2);
		
		ObjectMapper maper = new ObjectMapper();
		
		//处理过滤属性
//		SimpleFilterProvider filter1 = new SimpleFilterProvider().addFilter("productFilter", 
//				SimpleBeanPropertyFilter.filterOutAllExcept("id","name"));//只包含id和name
		
		SimpleFilterProvider filter = new SimpleFilterProvider().addFilter("productFilter", 
				SimpleBeanPropertyFilter.serializeAllExcept("id","name"));//不包含id和name
		maper.setFilters(filter);
		
		String string = maper.writeValueAsString(list);
		System.out.println(string);
	}
//[{"price":5500},{"price":4500}]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值