您的位置:首页 > 移动开发 > Objective-C

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

2014-10-31 21:45 561 查看
首先定义了一个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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息