最简单简洁高效的Json数据解析
一.无图无真相
二.主要代码
1.导入jar包
拷贝fastjson.jar包到projectlibs包下
2.封装工具类JsonUtil.java
package com.example.parsejsondemo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.List;
/**
* Json解析的工具类
*
* @author 孤狼
* @since 2015-8-8
*/
public class JsonUtil {
/**
* 将JSON转成 数组类型对象
*
* @param json
* @param clazz
* @param <T>
* @return
*/
public static <T> List<T> getListFromString(String json, Class<T> clazz) {
List<T> t = null;
try {
t = JSON.parseArray(json, clazz);
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
/**
* 将list转换成String
*
* @param list
* 准备转换的集合
* @return string
* @throws Exception
*/
public static String getStringFromList(List list) {
String string = "";
try {
string = JSON.toJSONString(list, true);
} catch (Exception e) {
e.printStackTrace();
}
return string;
}
/**
* 将java对象转换成json字符串
*
* @param obj
* 准备转换的对象
* @return json字符串
* @throws Exception
*/
public static String getStringFromObject(Object obj) {
String json = "";
try {
json = JSON.toJSONString(obj, true);
} catch (Exception e) {
e.printStackTrace();
}
return json;
}
/**
* 将json字符串转换成java对象
*
* @param json
* @param clazz
* @param <T>
* @return object
*/
public static <T> T getObjectFromString(String json, Class<T> clazz) {
T t = null;
try {
t = JSON.parseObject(json, clazz);
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
/**
* 将 json 字符串转为 JSONArray 对象;
*
* @param json
* @return JsonArray
*/
public static JSONArray getJsonArray(String json) {
JSONArray array = null;
try {
array = JSON.parseArray(json);
} catch (Exception e) {
e.printStackTrace();
}
return array;
}
/**
* 将 json 字符串转为 JSONObect 对象
*
* @param json
* @return JSONObject
*/
public static JSONObject getJsonObject(String json) {
JSONObject object = null;
try {
object = (JSONObject) JSON.parse(json);
} catch (Exception e) {
e.printStackTrace();
}
return object;
}
}
3.封装数据实体类(实例:ArticleBean.java和ArticleDetailBean.java)
package com.example.parsejsondemo;
import java.util.ArrayList;
import java.util.List;
/**
* 文章实体类
*
* @author 孤狼
* @since 2015-8-8
*/
public class ArticleBean {
private String title = "";
private String title_image_url = "";
private String create_time = "";
private long article_id = 0;
// 查看用户的信息
private List<UserInfoBean> headimages = new ArrayList<UserInfoBean>();
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitle_image_url() {
return title_image_url;
}
public void setTitle_image_url(String title_image_url) {
this.title_image_url = title_image_url;
}
public String getCreate_time() {
return create_time;
}
public void setCreate_time(String create_time) {
this.create_time = create_time;
}
public List<UserInfoBean> getHeadimages() {
return headimages;
}
public void setHeadimages(List<UserInfoBean> headimages) {
this.headimages = headimages;
}
public long getArticle_id() {
return article_id;
}
public void setArticle_id(long article_id) {
this.article_id = article_id;
}
}
package com.example.parsejsondemo;
import java.util.ArrayList;
import java.util.List;
/**
* 文章详情
*
* @author 孤狼
* @since 2015-8-8
*/
public class ArticleDetailBean {
private String content;
// 图片集合类
private List<ImageResult> images = new ArrayList<ImageResult>();
private String create_time;
// 点赞状态
private boolean if_dianzan;
// 评论数
private int comment_num;
// 第几期 例:第5期
private String times;
private String title;
private long article_id;
private int dianzan_num;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getCreate_time() {
return create_time;
}
public void setCreate_time(String create_time) {
this.create_time = create_time;
}
public boolean isIf_dianzan() {
return if_dianzan;
}
public void setIf_dianzan(boolean if_dianzan) {
this.if_dianzan = if_dianzan;
}
public int getComment_num() {
return comment_num;
}
public void setComment_num(int comment_num) {
this.comment_num = comment_num;
}
public String getTimes() {
return times;
}
public void setTimes(String times) {
this.times = times;
}
public long getArticle_id() {
return article_id;
}
public void setArticle_id(long article_id) {
this.article_id = article_id;
}
public int getDianzan_num() {
return dianzan_num;
}
public void setDianzan_num(int dianzan_num) {
this.dianzan_num = dianzan_num;
}
public List<ImageResult> getImages() {
return images;
}
public void setImages(List<ImageResult> images) {
this.images = images;
}
@Override
public String toString() {
return "ArticleDetailResult [title=" + title + ", content=" + content
+ ", create_time=" + create_time + ", comment_num="
+ comment_num + ", times=" + times + ", article_id="
+ article_id + ", dianzan_num=" + dianzan_num + "]";
}
}
4.代码中调用
a.解析 JsonList类型
package com.example.parsejsondemo;
import java.util.List;
import com.nostra13.universalimageloader.core.ImageLoader;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
/**
* 解析 JsonList类型
*
* @author 孤狼
* @since 2015-8-8
* */
public class JsonListActivity extends Activity {
private String data = "[ { \"article_id\": 682, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"给你的一封情书\", \"title_image_url\": \"http://e.hiphotos.baidu.com/image/w%3D310/sign=d0aa9ba85eb5c9ea62f305e2e538b622/b90e7bec54e736d1cb1f21ab9e504fc2d5626901.jpg\" }, { \"article_id\": 681, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"女人,你的别名是愚蠢\", \"title_image_url\": \"http://f.hiphotos.baidu.com/image/w%3D310/sign=ef8e5a82778b4710ce2ffbcdf3cfc3b2/72f082025aafa40f1ed46c7eae64034f78f01906.jpg\" }, { \"article_id\": 680, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"明确\", \"title_image_url\": \"http://g.hiphotos.baidu.com/image/w%3D310/sign=5c6d742fe4fe9925cb0c6f5104a95ee4/3ac79f3df8dcd100dce594cb768b4710b8122fda.jpg\" }, { \"article_id\": 679, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"秋之随想\", \"title_image_url\": \"http://d.hiphotos.baidu.com/image/w%3D310/sign=f9fd8128e9c4b7453494b117fffd1e78/0bd162d9f2d3572ce2779bdd8813632762d0c31e.jpg\" }, { \"article_id\": 681, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"女人,你的别名是愚蠢\", \"title_image_url\": \"http://f.hiphotos.baidu.com/image/w%3D310/sign=ef8e5a82778b4710ce2ffbcdf3cfc3b2/72f082025aafa40f1ed46c7eae64034f78f01906.jpg\" }, { \"article_id\": 680, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"明确\", \"title_image_url\": \"http://g.hiphotos.baidu.com/image/w%3D310/sign=5c6d742fe4fe9925cb0c6f5104a95ee4/3ac79f3df8dcd100dce594cb768b4710b8122fda.jpg\" }, { \"article_id\": 679, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"秋之随想\", \"title_image_url\": \"http://d.hiphotos.baidu.com/image/w%3D310/sign=f9fd8128e9c4b7453494b117fffd1e78/0bd162d9f2d3572ce2779bdd8813632762d0c31e.jpg\" }, { \"article_id\": 681, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"女人,你的别名是愚蠢\", \"title_image_url\": \"http://f.hiphotos.baidu.com/image/w%3D310/sign=ef8e5a82778b4710ce2ffbcdf3cfc3b2/72f082025aafa40f1ed46c7eae64034f78f01906.jpg\" }, { \"article_id\": 680, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"明确\", \"title_image_url\": \"http://g.hiphotos.baidu.com/image/w%3D310/sign=5c6d742fe4fe9925cb0c6f5104a95ee4/3ac79f3df8dcd100dce594cb768b4710b8122fda.jpg\" }, { \"article_id\": 679, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"秋之随想\", \"title_image_url\": \"http://d.hiphotos.baidu.com/image/w%3D310/sign=f9fd8128e9c4b7453494b117fffd1e78/0bd162d9f2d3572ce2779bdd8813632762d0c31e.jpg\" }, { \"article_id\": 681, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"女人。你的别名是愚蠢\", \"title_image_url\": \"http://f.hiphotos.baidu.com/image/w%3D310/sign=ef8e5a82778b4710ce2ffbcdf3cfc3b2/72f082025aafa40f1ed46c7eae64034f78f01906.jpg\" }, { \"article_id\": 680, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"明确\", \"title_image_url\": \"http://g.hiphotos.baidu.com/image/w%3D310/sign=5c6d742fe4fe9925cb0c6f5104a95ee4/3ac79f3df8dcd100dce594cb768b4710b8122fda.jpg\" }, { \"article_id\": 679, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"秋之随想\", \"title_image_url\": \"http://d.hiphotos.baidu.com/image/w%3D310/sign=f9fd8128e9c4b7453494b117fffd1e78/0bd162d9f2d3572ce2779bdd8813632762d0c31e.jpg\" } ]";
private List<ArticleBean> list;
private ListView listView;
private ImageLoader instance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
instance = ImageLoader.getInstance();
listView = (ListView) findViewById(R.id.listView);
// 把String类型的json解析成List集合
list = JsonUtil.getListFromString(data, ArticleBean.class);
// 设置适配器
listView.setAdapter(new CustomAdapter());
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
startActivity(new Intent(JsonListActivity.this,
JsonObjectActivity.class));
}
});
}
// 定义适配器
class CustomAdapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 查找控件
ViewHold hold;
if (convertView != null) {
hold = (ViewHold) convertView.getTag();
} else {
hold = new ViewHold();
convertView = View.inflate(getApplicationContext(),
R.layout.list_item, null);
hold.iv_cover = (ImageView) convertView
.findViewById(R.id.iv_coner);
hold.tv_time = (TextView) convertView
.findViewById(R.id.tv_time);
hold.tv_title = (TextView) convertView
.findViewById(R.id.tv_title);
convertView.setTag(hold);
}
// 填充数据
hold.tv_time.setText("孤狼 公布时间:"
+ list.get(position).getCreate_time());
hold.tv_title.setText(list.get(position).getTitle());
instance.displayImage(list.get(position).getTitle_image_url(),
hold.iv_cover);
return convertView;
}
class ViewHold {
private ImageView iv_cover;
private TextView tv_title;
private TextView tv_time;
}
}
}
b.解析 JsonObject类型
package com.example.parsejsondemo;
import com.nostra13.universalimageloader.core.ImageLoader;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
/**
* 解析 JsonObject类型
*
* @author 孤狼
* @since 2015-8-8
* */
public class JsonObjectActivity extends Activity {
// json数据
private String data = "{ \"article_id\": 682, \"comment_num\": 26, \"content\": \"你是清晨,\\r\\n是我醒来后的第一缕,\\r\\n是我起床后的第一缕清风。\\r\\n是我看见的第一抹浓绿色。\\r\\n你是的阳光温暖我的。\\r\\n你是中午,\\r\\n是手中香甜的饭菜。\\r\\n是我午睡时躺着的枕头。
\\r\\n你是晚上,\\r\\n是黑中的一屡凉爽,\\r\\n是黑暗中的平静心态,\\r\\n是惊恐中的心灵安慰。\\r\\n是天空中的闪烁繁星,\\r\\n你是我最遥远的。\\r\\n我的恋人。
\\r\\n\", \"create_time\": \"06-12 12:13\", \"dianzan_num\": 411, \"if_dianzan\": true, \"images\": [ { \"image_id\": 3595, \"image_url\": \"http://e.hiphotos.baidu.com/image/w%3D310/sign=d0aa9ba85eb5c9ea62f305e2e538b622/b90e7bec54e736d1cb1f21ab9e504fc2d5626901.jpg\" }, { \"image_id\": 3596, \"image_url\": \"http://7xjora.com2.z0.glb.qiniucdn.com/644121332662Etjmn.jpg?imageView2/0/w/500/h/500\" }, { \"image_id\": 3597, \"image_url\": \"http://7xjora.com2.z0.glb.qiniucdn.com/1650121333675aY09a.jpg?imageView2/0/w/500/h/500\" }, { \"image_id\": 3598, \"image_url\": \"http://7xjora.com2.z0.glb.qiniucdn.com/120712133440245oBv.jpg?imageView2/0/w/500/h/500\" }, { \"image_id\": 3599, \"image_url\": \"http://7xjora.com2.z0.glb.qiniucdn.com/940121334941gy1Ii.jpg?
imageView2/0/w/500/h/500\" } ], \"times\": \"第682期\", \"title\": \"给你的一封情书\" }";
private ImageLoader instance;
private TextView tv_title;
private TextView tv_time;
private ImageView iv_cover;
private ArticleDetailBean detailBean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_object);
instance = ImageLoader.getInstance();
iv_cover = (ImageView) findViewById(R.id.iv_coner);
tv_time = (TextView) findViewById(R.id.tv_time);
tv_title = (TextView) findViewById(R.id.tv_title);
// 把json数据解析成Object类型实体类
detailBean = JsonUtil
.getObjectFromString(data, ArticleDetailBean.class);
// 填充数据
tv_title.setText(detailBean.getTitle());
tv_time.setText(detailBean.getContent());
instance.displayImage(detailBean.getImages().get(0).getImage_url(),
iv_cover);
}
}
三.说明
Json数据是client和服务端交互的主要形式之中的一个,解析Json的方法工具也非常多,比方goole的Gson(能够去看前面关于Gson解析数据的方法)等等,而fastjson.jar解析json数据感觉非常强大高效和简洁。有用非常easy:引入jar包—>封装工具类—–>封装要解析的数据对象—>调用工具解析。代码非常easy。如有疑问请留言—-孤狼
四.实例Demo
最简单简洁高效的Json数据解析的更多相关文章
- 多叉树结构:JSON数据解析(一)
多叉树结构:JSON数据解析(一) 最近做一个实时数据搜索引擎的项目中,在项目架构的偏顶层需要写一个JSON数据解析的模块,由于目前JSON解析没有现成统一开源框架可以利用,目前只是手工利用com.a ...
- JSON数据解析(转)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 本文将主要介绍在Android ...
- JSON数据解析(GSON方式) (转)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 在上一篇博文<Andro ...
- iOS - JSON 数据解析
iOS - JSON 数据解析 前言 NS_CLASS_AVAILABLE(10_7, 5_0) @interface NSJSONSerialization : NSObject @availab ...
- Silverlight项目笔记7:xml/json数据解析、TreeView、引用类型与数据绑定错误、图片加载、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题
1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应 ...
- iOS学习—JSON数据解析
关于在iOS平台上进行JSON解析,已经有很多第三方的开源项目,比如TouchJson,JSONKit,SBJon等,自从iOS5.0以后,苹果SDK推出了自带的JSON解决方案NSJSONSer ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- iOS学习——JSON数据解析(十一)
在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...
- 使用Gson轻松解决复杂结构的Json数据解析
转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50961803 JSON简介 JSON(JavaScript Object Notati ...
随机推荐
- P1613 跑路 (最短路,倍增)
题目链接 Solution 发现 \(n\) 只有 \(50\), 可以用 \(floyd\) . 然后 \(w[i][j][l]\) 代表 \(i\) 到 \(j\) 是否存在 \(2^l\) 长的 ...
- html状态码
100——客户必须继续发出请求101——客户要求服务器根据请求转换HTTP协议版本 200——交易成功201——提示知道新文件的URL202——接受和处理.但处理未完成203——返回信息不确定或不完整 ...
- 用Java画QRCode二维码
支付宝.微信扫码支付的二维码,第三方的类库QRCode.jar 还是很好用的.下面贴出来这个东东生成二维码的代码. 使用时注意包括图片地址.编码内容.图片属性等几个参数,支付宝的它们的扫码回调地址. ...
- 无法安装MVC3,一直卡在vs10-kb2483190
原文发布时间为:2011-05-15 -- 来源于本人的百度文章 [由搬家工具导入] 无法安装MVC3,一直卡在vs10-kb2483190 解决方案: 1、用winrar 解压 MVC3安装文件 2 ...
- bzoj 3744 Gty的妹子序列 区间逆序对数(在线) 分块
题目链接 题意 给定\(n\)个数,\(q\)个询问,每次询问\([l,r]\)区间内的逆序对数. 强制在线. 思路 参考:http://www.cnblogs.com/candy99/p/65795 ...
- cocos2d programming guide 翻译 引导页(完结)
http://bbs.tairan.com/article-25-1.html Cocos2d官方入门指导 原文地址:http://www.cocos2d-iphone.org/wiki/doku. ...
- 和菜鸟一起学linux之V4L2摄像头应用流程【转】
转自:http://blog.csdn.net/eastmoon502136/article/details/8190262/ 上篇文章,知道了,C代码编译后存放在内存中的位置,那么C代码的整个编译过 ...
- centos6.x一键15项系统优化(转自努力哥)
#!/bin/sh ################################################ #Author:nulige # qqinfo: # Date: -- #vers ...
- Starting MySQL... ERROR! The server quit without updating PID file 问题解决
今天遇到一个mysql起不来,不知为啥挂了,启动是下面的报错 Starting MySQL... ERROR! The server quit without updating PID file 后来 ...
- 在 iSCSI Target 服务器中使用LVM创建和设置LUN(二)
LUN是逻辑单元号,它与iSCSI存储服务器共享.iSCSI 目标器通过TCP/IP网络共享它的物理驱动器给发起程序(initiator).这些来自一个大型存储(SAN:Storage Area Ne ...