2018/3/27更新:【墙裂推荐】Gson解析看这里->快速、高效解析Json数据之Gson
为什么使用FastJson?
解析速度快、解析方便、使用简单。
首先,看一下解析的代码量
iu = FAST.parseObject(JsonString.JsonStringValues, info_util.class);
没错,就一行代码。再来看看以前常用的JsonObject以及JsonArray解析
JSONObject result= new JSONObject(jsonString);
JSONArray jsonArray = result .getJSONArray("List");
for (int i = 0; i < jsonArray.length; i++) {
JSONObject json=jsonArray.getJSONObject(i);
json.getString("...");
...
...
}
这种一个个去获取,很麻烦。
开始FastJson:↓
首先,需要FastJson的两个jar包,Eclipse放到项目libs目录下
可以到这里下载(任意二选一):
积分支持
免费下载链接
现在,有一串这样的Json数据:
{
"status": 1,
"msg": null,
"data": {
"start": 0,
"limit": 10,
"total": 5,
"rows": [
{
"messageNo": "Me201607211148242364423",
"memberNo": "AD2016070812145640900000003",
"mobileNo": "151****1314",
"nickname": "远方",
"headPath": "/fileupload/memberImage/83788978A0614007BF7F5D20F668088A1468667650848.jpg",
"messageType": 0,
"readFlag": 0,
"sendTime": 1469072904000,
"content": " ",
"updateTime": 1469072904000
},
{
"messageNo": "Me201607211146458551987",
"memberNo": "AD2016070812145640900000003",
"mobileNo": "151****1314",
"nickname": "远方",
"headPath": "/fileupload/memberImage/83788978A0614007BF7F5D20F668088A1468667650848.jpg",
"messageType": 0,
"readFlag": 0,
"sendTime": 1469072805000,
"content": "有6",
"updateTime": 1469072805000
}
...
],
"otherData": null
}
}
这串Json数据分为3层,最外层的"status",“msg"和"data”;
然后"data"里面的"start",“limit”,“total”,“rows”;最后"rows"里面的JSONArray。
源码:
JsonString.java
public class JsonString {
public static final String JsonStringValues = "{\"status\":1,\"msg\":null,"
+ "\"data\":{\"start\":0,\"limit\":10,\"total\":5,"
+ "\"rows\":[{\"messageNo\":\"Me201607211148242364423\","
+ "\"memberNo\":\"AD2016070812145640900000003\","
+ "\"mobileNo\":\"151****1314\","
+ "\"nickname\":\"远方\","
+ "\"headPath\":\"/fileupload/memberImage/83788978A0614007BF7F5D20F668088A1468667650848.jpg\","
+ "\"messageType\":0,"
+ "\"readFlag\":0,"
+ "\"sendTime\":1469072904000,"
+ "\"content\":\" \","
+ "\"updateTime\":1469072904000},"
+ "{\"messageNo\":\"Me201607211146458551987\","
+ "\"memberNo\":\"AD2016070812145640900000003\","
+ "\"mobileNo\":\"151****1314\","
+ "\"nickname\":\"远方\","
+ "\"headPath\":\"/fileupload/memberImage/83788978A0614007BF7F5D20F668088A1468667650848.jpg\","
+ "\"messageType\":0,"
+ "\"readFlag\":0,"
+ "\"sendTime\":1469072805000,"
+ "\"content\":\"有6\","
+ "\"updateTime\":1469072805000},{\"messageNo\":\"Me201607191730505629442\",\"memberNo\":\"AD2016070810124275700000002\",\"mobileNo\""
+ ":\"156****3913\",\"nickname\":\"呵呵\",\"headPath\":\"/fileupload/memberImage/FD5DAE12CB7944"
+ "7BB5263EB0EE4E75F41469069984778.jpg\",\"messageType\":0,\"readFlag\":0,\"sendTime\":1468"
+ "920650000,\"content\":\"额\",\"updateTime\":1468920650000},{\"messageNo\":\"Me2016071610"
+ "49255579387\",\"memberNo\":\"AD2016070812145640900000003\",\"mobileNo\":\"151****1314\",\"nic"
+ "kname\":\"远方\",\"headPath\":\"/fileupload/memberImage/83788978A0614007BF7F5D20F668088A14686"
+ "67650848.jpg\",\"messageType\":1,\"readFlag\":0,\"sendTime\":1468637365000,\"content\":\"111\",\"upda"
+ "teTime\":1468637365000},{\"messageNo\":\"Me201607161037444613493\",\"memberNo\":\"AD20160708121456409"
+ "00000003\",\"mobileNo\":\"151****1314\",\"nickname\":\"远方\",\"headPath\":\"/fileupload/memberImage/8"
+ "3788978A0614007BF7F5D20F668088A1468667650848.jpg\",\"messageType\":0,\"readFlag\":0,\"sendTime\":146"
+ "8636664000,\"content\":\"哈哈哈\",\"updateTime\":1468636664000}],\"otherData\":null}}";
}
存储数据用的 bean类,info_util.java
Android Studio / IntelliJ IDEA快速生成bean类可参考以下文章1-2步骤
快速、高效解析Json数据之Gson
import java.util.List;
public class info_util {
/**
* status : 1
* msg : null
* data : {"start":0,"limit":10,"total":5,"rows":[{"messageNo":"Me201607211148242364423","memberNo":"AD2016070812145640900000003","mobileNo":"151****1314","nickname":"远方","headPath":"/fileupload/memberImage/83788978A0614007BF7F5D20F668088A1468667650848.jpg","messageType":0,"readFlag":0,"sendTime":1469072904000,"content":" ","updateTime":1469072904000},{"messageNo":"Me201607211146458551987","memberNo":"AD2016070812145640900000003","mobileNo":"151****1314","nickname":"远方","headPath":"/fileupload/memberImage/83788978A0614007BF7F5D20F668088A1468667650848.jpg","messageType":0,"readFlag":0,"sendTime":1469072805000,"content":"有6","updateTime":1469072805000},{"messageNo":"Me201607191730505629442","memberNo":"AD2016070810124275700000002","mobileNo":"156****3913","nickname":"呵呵","headPath":"/fileupload/memberImage/FD5DAE12CB79447BB5263EB0EE4E75F41469069984778.jpg","messageType":0,"readFlag":0,"sendTime":1468920650000,"content":"额","updateTime":1468920650000},{"messageNo":"Me201607161049255579387","memberNo":"AD2016070812145640900000003","mobileNo":"151****1314","nickname":"远方","headPath":"/fileupload/memberImage/83788978A0614007BF7F5D20F668088A1468667650848.jpg","messageType":1,"readFlag":0,"sendTime":1468637365000,"content":"111","updateTime":1468637365000},{"messageNo":"Me201607161037444613493","memberNo":"AD2016070812145640900000003","mobileNo":"151****1314","nickname":"远方","headPath":"/fileupload/memberImage/83788978A0614007BF7F5D20F668088A1468667650848.jpg","messageType":0,"readFlag":0,"sendTime":1468636664000,"content":"哈哈哈","updateTime":1468636664000}],"otherData":null}
*/
private int status;
private String msg;
private DataBean data;
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public static class DataBean {
/**
* start : 0
* limit : 10
* total : 5
* rows : [{"messageNo":"Me201607211148242364423","memberNo":"AD2016070812145640900000003","mobileNo":"151****1314","nickname":"远方","headPath":"/fileupload/memberImage/83788978A0614007BF7F5D20F668088A1468667650848.jpg","messageType":0,"readFlag":0,"sendTime":1469072904000,"content":" ","updateTime":1469072904000},{"messageNo":"Me201607211146458551987","memberNo":"AD2016070812145640900000003","mobileNo":"151****1314","nickname":"远方","headPath":"/fileupload/memberImage/83788978A0614007BF7F5D20F668088A1468667650848.jpg","messageType":0,"readFlag":0,"sendTime":1469072805000,"content":"有6","updateTime":1469072805000},{"messageNo":"Me201607191730505629442","memberNo":"AD2016070810124275700000002","mobileNo":"156****3913","nickname":"呵呵","headPath":"/fileupload/memberImage/FD5DAE12CB79447BB5263EB0EE4E75F41469069984778.jpg","messageType":0,"readFlag":0,"sendTime":1468920650000,"content":"额","updateTime":1468920650000},{"messageNo":"Me201607161049255579387","memberNo":"AD2016070812145640900000003","mobileNo":"151****1314","nickname":"远方","headPath":"/fileupload/memberImage/83788978A0614007BF7F5D20F668088A1468667650848.jpg","messageType":1,"readFlag":0,"sendTime":1468637365000,"content":"111","updateTime":1468637365000},{"messageNo":"Me201607161037444613493","memberNo":"AD2016070812145640900000003","mobileNo":"151****1314","nickname":"远方","headPath":"/fileupload/memberImage/83788978A0614007BF7F5D20F668088A1468667650848.jpg","messageType":0,"readFlag":0,"sendTime":1468636664000,"content":"哈哈哈","updateTime":1468636664000}]
* otherData : null
*/
private int start;
private int limit;
private int total;
private String otherData;
private List<RowsBean> rows;
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getLimit() {
return limit;
}
public void setLimit(int limit) {
this.limit = limit;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public String getOtherData() {
return otherData;
}
public void setOtherData(String otherData) {
this.otherData = otherData;
}
public List<RowsBean> getRows() {
return rows;
}
public void setRows(List<RowsBean> rows) {
this.rows = rows;
}
public static class RowsBean {
/**
* messageNo : Me201607211148242364423
* memberNo : AD2016070812145640900000003
* mobileNo : 151****1314
* nickname : 远方
* headPath : /fileupload/memberImage/83788978A0614007BF7F5D20F668088A1468667650848.jpg
* messageType : 0
* readFlag : 0
* sendTime : 1469072904000
* content :
* updateTime : 1469072904000
*/
private String messageNo;
private String memberNo;
private String mobileNo;
private String nickname;
private String headPath;
private int messageType;
private int readFlag;
private long sendTime;
private String content;
private long updateTime;
public String getMessageNo() {
return messageNo;
}
public void setMessageNo(String messageNo) {
this.messageNo = messageNo;
}
public String getMemberNo() {
return memberNo;
}
public void setMemberNo(String memberNo) {
this.memberNo = memberNo;
}
public String getMobileNo() {
return mobileNo;
}
public void setMobileNo(String mobileNo) {
this.mobileNo = mobileNo;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getHeadPath() {
return headPath;
}
public void setHeadPath(String headPath) {
this.headPath = headPath;
}
public int getMessageType() {
return messageType;
}
public void setMessageType(int messageType) {
this.messageType = messageType;
}
public int getReadFlag() {
return readFlag;
}
public void setReadFlag(int readFlag) {
this.readFlag = readFlag;
}
public long getSendTime() {
return sendTime;
}
public void setSendTime(long sendTime) {
this.sendTime = sendTime;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(long updateTime) {
this.updateTime = updateTime;
}
@Override
public String toString() {
return "messageNo='" + messageNo + '\'' +
", memberNo='" + memberNo + '\'' +
", mobileNo='" + mobileNo + '\'' +
", nickname='" + nickname + '\'' +
", headPath='" + headPath + '\'' +
", messageType=" + messageType +
", readFlag=" + readFlag +
", sendTime=" + sendTime +
", content='" + content + '\'' +
", updateTime=" + updateTime;
}
}
}
}
然后要用的工具类,已经写好,其他项目也可以直接用,无需改动。
FAST.java
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
/**
* 工具类
*
* @author sowhat
*
*/
public class FAST {
/**
* 解析JsonObject数据
*
* @param jsonString
* Json格式字符串
* @param cls
* 封装类
*
*/
public static <T> T parseObject(String jsonString, Class<T> cls) {
T t = null;
try {
t = JSON.parseObject(jsonString, cls);
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
public static <T> T parseObject(byte[] jsonBytes, Class<T> cls) {
T t = null;
try {
t = JSON.parseObject(jsonBytes, cls);
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
/**
* 解析JsonArray数据
*
* @param jsonString
* @param cls
* @return
*/
public static <T> List<T> parseArray(String jsonString, Class<T> cls) {
List<T> list = new ArrayList<T>();
try {
list = JSON.parseArray(jsonString, cls);
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* 解析JsonArray数据,返回Map类型的List
*
* @param jsonString
* @return
*/
public static List<Map<String, Object>> parseObjectListKeyMaps(
String jsonString) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
list = JSON.parseObject(jsonString,
new TypeReference<List<Map<String, Object>>>() {
});
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
现在就可以解析Json数据了:↓
MainActivity.java
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.sowhat.test_fastjson.util.FAST;
import com.sowhat.test_fastjson.util.info_util;
public class MainActivity extends Activity {
private TextView edit;
private info_util iu = null;
private List<info_util.DataBean.RowsBean> olist = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit = (TextView) findViewById(R.id.edit);
}
public void btn(View v) {
/**
* 解析数据
*/
iu = FAST.parseObject(JsonString.JsonStringValues, info_util.class);
olist = iu.getData().getRows();
/**
* 打印解析结果
*/
StringBuffer bu = new StringBuffer();
for (int i = 0; i < olist.size(); i++) {
bu.append("jsonArray第" + (i + 1) + "条数据:\n"
+ olist.get(i).toString() + "\n\n");
}
edit.setText("jsonArray数据:\n" + "\n" + bu);
}
}
布局文件:activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical" >
<TextView
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:hint="解析结果会在这里出现" />
</LinearLayout>
</ScrollView>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="btn"
android:text="开始解析" />
</LinearLayout>
最后,看一下运行的结果:
除去必要的1个封装类,解析Json的就一行代码。
代码已经全部贴出来了,还需要源码的可以到这里下载(任意二选一):
积分支持
免费下载链接
尊重原创,码字不易。有时间再写写用Gson解析Json数据。