转载请注明出处:http://blog.csdn.net/htwhtw123/article/details/75271680
1.Android内置的方法构建json文本
假设现在要创建这样一个json文本
{
"phone" : ["12345678", "87654321"], // 数组
"name" : "yuanzhifei89", // 字符串
"age" : 100, // 数值
"address" : { "country" : "china", "province" : "jiangsu" }, // 对象
"married" : false // 布尔值
}
(1)使用JSONStringer 构建json文本:
private void JSONStringerTest(){
JSONStringer jsonText=new JSONStringer();
try {
jsonText.object();
jsonText.key("phone");
jsonText.array();
jsonText.value("12345647").value("87654321");
jsonText.endArray();
jsonText.key("name");
jsonText.value("htw");
jsonText.key("age");
jsonText.value(100);
jsonText.key("address");
jsonText.object();
jsonText.key("country");
jsonText.value("chain");
jsonText.key("provice");
jsonText.value("sichuan");
jsonText.endObject();
jsonText.key("married");
jsonText.value(false);
jsonText.endObject();
tv.setText(jsonText.toString());
} catch (JSONException e) {
e.printStackTrace();
log.d(TAG,"错误");
}
}
(2)使用JSONObject 和JSONArray 构建json文本
private void JSONObjectAndJSONArray(){
JSONObject person=new JSONObject();
try {
// 这样也是可以的
// String[] array=new String[]{"123456798","87654321"};
// JSONArray phone=new JSONArray(array);
JSONArray phone=new JSONArray();
phone.put("123456789");
phone.put("87654321");
person.put("phone",phone);
person.put("name","htw");
person.put("age",100);
JSONObject address=new JSONObject();
address.put("country","chain");
address.put("province","sichuan");
person.put("address",address);
person.put("married",false);
tv.setText(person.toString());
} catch (JSONException e) {
e.printStackTrace();
log.d(TAG,"错误");
}
}
2.Android内置的方法解析json文本
(1)使用JSONObject和JSONArray解析如下json文本:
String jsonText = "{'singers':[{'id':'2','name':'tom','gender':'男'},{'id':'3','name':'jerry'," +
"'gender':'男'}," +
"{'id':'4','name':'jim','gender':'男'},{'id':'5','name':'lily','gender':'女'}]}";
代码如下:
private void parseJsonMulti(String strResult) {
try {
JSONArray jsonObjs = new JSONObject(strResult).getJSONArray("singers");
String s = "";
for(int i = 0; i < jsonObjs.length() ; i++){
JSONObject jsonObj = (JSONObject)jsonObjs.get(i);
int id = jsonObj.getInt("id");
String name = jsonObj.getString("name");
String gender = jsonObj.getString("gender");
s += "ID号"+id + ", 姓名:" + name + ",性别:" + gender+ "\n" ;
}
tv.setText(s);
} catch (JSONException e) {
tv.setText("Jsons parse error !");
e.printStackTrace();
}
}
3.使用fastjson:
(1)这里推荐一个Android Studio的插件:GsonFormat,它可以帮助开发者快速生成json对应实体类。添加方式:
file->setting->Plugins->搜索框输入:GsonFormat->search in repositories-> install->重启Android Studio
使用方法:新建一个类,准备做json对应实体类,在该类中进行编辑,使用快捷键:Alt+S或者使用Alt+insert在跳出框中选Gsonjson.
在GsonFormat对话框里面输入想要解析json文本的一个例子:
{
"status": {
"code": 400,
"msg": "error"
},
"data": {
"error": "账号不存在"
}
}
OK过后做一些设置:
再OK过后就会添加相应的变量与方法进入类中,如下:
public class Test {
/**
* status : {"code":400,"msg":"error"}
* data : {"error":"账号不存在"}
*/
private StatusBean status;
private DataBean data;
public StatusBean getStatus() {
return status;
}
public void setStatus(StatusBean status) {
this.status = status;
}
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public static class StatusBean {
/**
* code : 400
* msg : error
*/
private int code;
private String msg;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
public static class DataBean {
/**
* error : 账号不存在
*/
private String error;
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
}
}
(2)在build.gradle中加入如下两行于dependencies{}中
compile 'com.alibaba:fastjson:1.2.35'
compile 'com.alibaba:fastjson:1.1.59.android'
(3)解析json文本:
在有刚刚那个类的基础上:
Test test= JSON.parseObject(jsonString, Test .class);
jsonString是要解析的json文本,它被解析到了对象test里,这样就可以直接取自己想要的数据了。如:取error值:
String error=test.getData().getError();
(4)生成json文本:
Test test=new Test();
Test.DataBean data=new Test.DataBean();
data.setError("错误");
test.setData(data);
Test.StatusBean status=new Test.StatusBean();
status.setCode(123);
status.setMsg("消息");
test.setStatus(status);
String jsonString= JSON.toJSONString(test);
Toast.makeText(this, jsonString+"", Toast.LENGTH_SHORT).show();
生成结果:
更多fastjson相关用法,可以看这里,我觉得这篇写得比较祥