调用Jackson一行解析海量复杂结构的json数据
来源:互联网 发布:iphone 163 smtp端口 编辑:程序博客网 时间:2024/06/05 03:28
下面是我学习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
- 调用Jackson一行解析海量复杂结构的json数据
- 使用Gson轻松解决复杂结构的Json数据解析
- 使用Gson轻松解决复杂结构的Json数据解析
- Android利用Gson库解析复杂结构的JSON数据
- Jackson解析JSON数据
- 解析复杂的json数据
- 复杂json数据的解析
- JSON的解析[Jackson]
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- Gson解析复杂的json数据
- Android中解析复杂的JSON数据
- Gson解析复杂的json数据
- Gson解析复杂的json数据
- Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- mysqld dead but pid file exists
- nodejs安装 win
- 优先队列
- 为什么在函数的声明后面还有一个 const?
- C#读取EXCEL中工作表不是Sheet1等默认名称
- 调用Jackson一行解析海量复杂结构的json数据
- java中多线程的实现方式以及区别(1)
- HDU 3635 Dragon Balls
- STUN和TURN技术浅析
- maven打包 含src下的xml文件
- JAVA 单播、多播(组播)、广播
- 因特网的IP协议是不可靠无连接的,那为什么当初不直接把它设计为可靠的?
- Codeforces Round #296 (Div. 1) (A B)
- 办公系统中经常遇到的权限管理问题 (一)