Json , String, Object , List 之间的相互转换

首先定义了一个Filter类


package com.xin.map.bean;

public class Filter {

	private String name;
	private String operator;
	private String value;
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getOperator() {
		return operator;
	}

	public void setOperator(String operator) {
		this.operator = operator;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

	public String toString()
	{
		return "Filter [name=" + name + ", operator=" + operator + ", value=" + value + "]";
	}
	
	public Filter(String name, String operator, String value)
	{
		this.name 	  = name;
		this.operator = operator;
		this.value 	  = value;
	}
	
	
}

又创建了一个FilterWithJsonTest 类, 来实现json串和Filter, List 之间的相互转换


package com.xin.map.bean;

import java.util.ArrayList;
import java.util.List;

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;

public class FilterWithJsonTest {

	static ObjectMapper mapper = new ObjectMapper();
	private static String jsonFilter;
	private static Filter objFilter ;
	private static List<Filter> filterList = new ArrayList<Filter>();
	private static String jsonList;
	//non key-value json string
	private static String strJson;
	
	public static void main(String[] args)
	{
		jsonFilter = "{\"name\":\"continent\",\"operator\":\"equals\",\"value\":\"EU\"}";
		objFilter = new Filter("country", "not equal", "CHINA");
		
		filterList.add(new Filter("continent", "equals", "EUROPE"));
		filterList.add(new Filter("country", "equals", "JAPAN"));
		filterList.add(new Filter("city", "equals", "AnShan"));
		
		jsonList = "[{\"name\":\"city\",\"operator\":\"greater than\",\"value\":\"GuangZhou\"},"
				 + "{\"name\":\"country\",\"operator\":\"less than\",\"value\":\"KOREA\"},"
				 + "{\"name\":\"city\",\"operator\":\"equals\",\"value\":\"DALIAN\"}]";
	
		strJson = "[\"apple\", \"pear\"]";
		
		JsonConvertToObject(jsonFilter);
		ObjectConvertToJson(objFilter);
		ListConvertToJson(filterList);
		JsonConvertToList(jsonList);
		JsonConvertToArrayStr(strJson);
	}
	
	private static void JsonConvertToObject(String jsonStr)
	{
		try
		{
			Filter f = mapper.readValue(jsonStr, Filter.class);
			System.out.println("JsonConvertToObject function result: " + f);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
	private static void ObjectConvertToJson(Filter f)
	{
		try 
		{
			String strResult = mapper.writeValueAsString(f);
			System.out.println("ObjectConvertToJson function result: " + strResult);
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		} 
	}
	
	private static void ListConvertToJson(List<Filter> filterList)
	{
		try
		{
			String arrJson = mapper.writeValueAsString(filterList);
			System.out.println("ListConvertToJson function result: " + arrJson);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
	private static void JsonConvertToList(String arrJson)
	{
		try
		{
			List<Filter> filtersResult = mapper.readValue(jsonList, new TypeReference<List<Filter>>(){});
			System.out.println("JsonConvertToList function result: ");
			for(Filter one : filtersResult)
			{
				System.out.println("each filter :" + one);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
	//Json string convert to string array
	private static void JsonConvertToArrayStr(String strJson)
	{
		try
		{
			List<String> arrString = mapper.readValue(strJson, new TypeReference<List<String>>(){});
			System.out.println("JsonConverttoArrayStr:");
			for(String str : arrString)
			{
				System.out.println("each string: " + str);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

执行后, 抛出异常:

org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class com.xin.map.bean.Filter]: 
can not instantiate from JSON object (need to add/enable type information?)
 at [Source: java.io.StringReader@56bbf64f; line: 1, column: 2]
	at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
	at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObjectUsingNonDefault(BeanDeserializer.java:740)
	at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:683)
	at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
	at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2723)
	at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1854)
	at com.xin.map.bean.FilterWithJsonTest.JsonConvertToObject(FilterWithJsonTest.java:45)
	at com.xin.map.bean.FilterWithJsonTest.main(FilterWithJsonTest.java:34)

原因是, 在Filter类中没有提供无参数的构造函数, 加上后,执行成功:

JsonConvertToObject function result: Filter [name=continent, operator=equals, value=EU]
ObjectConvertToJson function result: {"name":"country","operator":"not equal","value":"CHINA"}
ListConvertToJson function result: [{"name":"continent","operator":"equals","value":"EUROPE"},{"name":"country","operator":"equals","value":"JAPAN"},{"name":"city","operator":"equals","value":"AnShan"}]
JsonConvertToList function result:
each filter :Filter [name=city, operator=greater than, value=GuangZhou]
each filter :Filter [name=country, operator=less than, value=KOREA]
each filter :Filter [name=city, operator=equals, value=DALIAN]
JsonConverttoArrayStr:
each string: apple
each string: pear

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值