下面是我学习jackson之后总结了诸多失败之后总结出的一个超级方便将json解析为对象的方法
package com.example.jacksondemo;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import com.djl.utils.JackSonUtil;
import com.example.jacksondemo.R;
/**
*
* @author DJL
* @since 2015/03/19 11:01
* @version 1.0 这里需要注意1.实体bean的结构必须与json中的数据结构一。2.实体bean中的数据名称必须与json中对应的关键词一至
*
*/
public class MainActivity extends Activity {
private ArrayList<CategoryBean> categorys;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InputStream is;
try {
// 获取json数据流
is = getAssets().open("demo.json");
// 海量json数据,一行瞬间解析,这种feel谁用谁知道
JsonBaseBean baseBean = JackSonUtil.parse(JsonBaseBean.class, is);
categorys = baseBean.deals;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 这里我仅做一下解析出的数据的简单展示,具体的用处你们比我清楚
StringBuilder sb = new StringBuilder();
for (CategoryBean c : categorys) {
sb.append("\n categorys").append(c.toString()).append("\n\n\n");
}
TextView tv = (TextView) findViewById(R.id.tv);
tv.setText(sb.toString());
}
}
下面是jsonutils
package com.djl.utils;
import java.io.IOException;
import java.io.InputStream;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import android.util.Log;
/**
*
* @author DJL
* @since 2014/10/25 18:33
* @version 1.0 这里需要注意1.实体bean的结构必须与json中的数据结构一。2.实体bean中的数据名称必须与json中对应的关键词一至
*
*/
public class JackSonUtil {
/**
* @author Djl
* @param clazz
* 需要解析成的bean类型 改bean类型必须实现Serializable接口
* @param is
* json的输入流
* @return 返回解析成的bean对象 例: Djl p = JackSonUtil.parse(Djl.class, is);
*/
public static <T> T parse(Class<T> clazz, InputStream is) {
ObjectMapper mapper = new ObjectMapper().setVisibility(
JsonMethod.FIELD, Visibility.ANY);
T result = null;
try {
/**
* true可以设置私有变量
*/
mapper.configure(
DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY,
true);
/**
* 与未定义的属相有关
*/
mapper.configure(
DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,
false);
result = mapper.readValue(is, clazz);
} catch (JsonParseException e) {
Log.e("JackSonUtil", e.getMessage());
} catch (JsonMappingException e) {
Log.e("JackSonUtil", e.getMessage());
} catch (IOException e) {
Log.e("JackSonUtil", e.getMessage());
}
return result;
}
/**
* @author Djl
* @param clazz
* 需要解析成的bean类型 改bean类型必须实现Serializable接口
* @param json
* json文本
* @return 返回解析成的bean对象 例: Djl p = JackSonUtil.parse(Djl.class, is);
*/
public static <T> T parse(Class<T> clazz, String json) {
ObjectMapper mapper = new ObjectMapper().setVisibility(
JsonMethod.FIELD, Visibility.ANY);
T result = null;
try {
/**
* true可以设置私有变量
*/
mapper.configure(
DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY,
true);
/**
* 与未定义的属相有关
*/
mapper.configure(
DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,
false);
result = mapper.readValue(json, clazz);
} catch (JsonParseException e) {
Log.e("JackSonUtil", e.getMessage());
} catch (JsonMappingException e) {
Log.e("JackSonUtil", e.getMessage());
} catch (IOException e) {
Log.e("JackSonUtil", e.getMessage());
}
return result;
}
}
Demo下载 https://github.com/djl123581/DjlPrivate.git