Android创建和解析JSON文本

转载请注明出处: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相关用法,可以看这里,我觉得这篇写得比较祥

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值