json的解析

来源:互联网 发布:土木工程词典 知乎 编辑:程序博客网 时间:2024/06/05 03:11

一、概念



什么是json

简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是 JavaScript 很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。


二、特点


(1)表示名称键值对
这个比较简单,表示的形式如下:
按照最简单的形式,可以用下面这样的 JSON 表示 "名称 / 值对" :{ "firstName": "Brett" }

(2)表示数组
如果使用 JSON,就只需将多个带花括号的记录分组在一起:
    { "people": [    { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },    { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},    { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }    ]}


三、原生解析


1.原生解析

(1)将json格式的字符串{}解析为对象

    private void jsonToJavaObjectByNative() {        // 1 获取或创建JSON数据        String json = "{\n" +                "\t\"id\":2, \"name\":\"大虾\", \n" +                "\t\"price\":12.3, \n" +                "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" +                "}\n";        ShopInfo shopInfo = null;        // 2 解析json        try {            JSONObject jsonObject = new JSONObject(json);//            int id = jsonObject.getInt("id");            int id1 = jsonObject.optInt("id");            String name = jsonObject.optString("name");            double price = jsonObject.optDouble("price");            String imagePath = jsonObject.optString("imagePath");            // 封装Java对象            shopInfo = new ShopInfo(id1, name, price, imagePath);        } catch (JSONException e) {            e.printStackTrace();        }        // 3 显示JSON数据        tv_native_orignal.setText(json);        tv_native_last.setText(shopInfo.toString());    }

(2)将json字符串转换成对象的List

    private void jsonToJavaObjectByNative() {        // 1 获取或创建JSON数据        String json = "{\n" +                "\t\"id\":2, \"name\":\"大虾\", \n" +                "\t\"price\":12.3, \n" +                "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" +                "}\n";        ShopInfo shopInfo = null;        // 2 解析json        try {            JSONObject jsonObject = new JSONObject(json);//            int id = jsonObject.getInt("id");            int id1 = jsonObject.optInt("id");            String name = jsonObject.optString("name");            double price = jsonObject.optDouble("price");            String imagePath = jsonObject.optString("imagePath");            // 封装Java对象            shopInfo = new ShopInfo(id1, name, price, imagePath);        } catch (JSONException e) {            e.printStackTrace();        }        // 3 显示JSON数据        tv_native_orignal.setText(json);        tv_native_last.setText(shopInfo.toString());    }

(3)嵌套的json的解析

对于这样形式的json对象字符串,需要进行一层一层的解析

    private void jsonToJavaOfComplex() {        // 1 获取或创建JSON数据        String json = "{\n" +                "    \"data\": {\n" +                "        \"count\": 5,\n" +                "        \"items\": [\n" +                "            {\n" +                "                \"id\": 45,\n" +                "                \"title\": \"坚果\"\n" +                "            },\n" +                "            {\n" +                "                \"id\": 132,\n" +                "                \"title\": \"炒货\"\n" +                "            },\n" +                "            {\n" +                "                \"id\": 166,\n" +                "                \"title\": \"蜜饯\"\n" +                "            },\n" +                "            {\n" +                "                \"id\": 195,\n" +                "                \"title\": \"果脯\"\n" +                "            },\n" +                "            {\n" +                "                \"id\": 196,\n" +                "                \"title\": \"礼盒\"\n" +                "            }\n" +                "        ]\n" +                "    },\n" +                "    \"rs_code\": \"1000\",\n" +                "    \"rs_msg\": \"success\"\n" +                "}";        // 封装Java对象        DataInfo dataInfo = new DataInfo();        // 2 解析json        try {            JSONObject jsonObject = new JSONObject(json);            // 第一层解析            JSONObject data = jsonObject.optJSONObject("data");            String rs_code = jsonObject.optString("rs_code");            String rs_msg = jsonObject.optString("rs_msg");            // 第一层封装            dataInfo.setRs_code(rs_code);            dataInfo.setRs_msg(rs_msg);            DataInfo.DataBean dataBean = new DataInfo.DataBean();            dataInfo.setData(dataBean);            // 第二层解析            int count = data.optInt("count");            JSONArray items = data.optJSONArray("items");            // 第二层数据的封装            dataBean.setCount(count);            List<DataInfo.DataBean.ItemsBean> itemsBean = new ArrayList<>();            dataBean.setItems(itemsBean);            // 第三层解析            for (int i = 0; i < items.length(); i++) {                JSONObject jsonObject1 = items.optJSONObject(i);                if (jsonObject1 != null) {                    int id = jsonObject1.optInt("id");                    String title = jsonObject1.optString("title");                    // 第三层数据的封装                    DataInfo.DataBean.ItemsBean bean = new DataInfo.DataBean.ItemsBean();                    bean.setId(id);                    bean.setTitle(title);                    itemsBean.add(bean);                }            }        } catch (JSONException e) {            e.printStackTrace();        }        // 3 显示JSON数据        tv_native_orignal.setText(json);        tv_native_last.setText(dataInfo.toString());    }



四、Gson解析



可以看出来通过原生的方式来进行解析还是比较困难的

(1)将json格式的字符串{}解析为对象

    private void jsonToJavaObjectByGson() {        // 1 获取或创建JSON数据        String json = "{\n" +                "\t\"id\":2, \"name\":\"大虾\", \n" +                "\t\"price\":12.3, \n" +                "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" +                "}\n";        // 2 解析JSON数据        Gson gson = new Gson();        ShopInfo shopInfo = gson.fromJson(json, ShopInfo.class);        // 3 展示数据        tv_gson_orignal.setText(json);        tv_gson_last.setText(shopInfo.toString());    }
如下是ShopInfo对象

public class ShopInfo {    private int id;    private String name;    private double price;    private String imagePath;    public ShopInfo(int id, String name, double price, String imagePath) {        this.id = id;        this.name = name;        this.price = price;        this.imagePath = imagePath;    }    public ShopInfo() {    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    public String getImagePath() {        return imagePath;    }    public void setImagePath(String imagePath) {        this.imagePath = imagePath;    }    @Override    public String toString() {        return "ShopInfo{" +                "id=" + id +                ", name='" + name + '\'' +                ", price=" + price +                ", imagePath='" + imagePath + '\'' +                '}';    }}

(2)将json字符串解析成对象的List

    private void jsonToJavaListByGson() {        // 1 获取或创建JSON数据        String json = "[\n" +                "    {\n" +                "        \"id\": 1,\n" +                "        \"imagePath\": \"http://192.168.10.165:8080/f1.jpg\",\n" +                "        \"name\": \"大虾1\",\n" +                "        \"price\": 12.3\n" +                "    },\n" +                "    {\n" +                "        \"id\": 2,\n" +                "        \"imagePath\": \"http://192.168.10.165:8080/f2.jpg\",\n" +                "        \"name\": \"大虾2\",\n" +                "        \"price\": 12.5\n" +                "    }\n" +                "]";        // 2 解析JSON数据        Gson gson = new Gson();        List<ShopInfo> shops = gson.fromJson(json, new TypeToken<List<ShopInfo>>() {        }.getType());        // 3 展示数据        tv_gson_orignal.setText(json);        tv_gson_last.setText(shops.toString());    }

(3)将java对象转换成json字符串

    private void javaToJsonObjectByGson() {        // 1 获取或创建Java对象        ShopInfo shopInfo = new ShopInfo(1,"鲍鱼",250.0,"baoyu");        // 2 生成JSON数据        Gson gson = new Gson();        String json = gson.toJson(shopInfo);        // 3 展示数据        tv_gson_orignal.setText(shopInfo.toString());        tv_gson_last.setText(json);    }

(4)将java对象List转换成json字符串

好的的方法都已经封装好了,使用起来还是挺给力的

    private void javaToJsonArrayByGson() {        // 1 获取或创建Java对象        List<ShopInfo> shops = new ArrayList<>();        ShopInfo baoyu = new ShopInfo(1, "鲍鱼", 250.0, "baoyu");        ShopInfo longxia = new ShopInfo(2, "龙虾", 251.0, "longxia");        shops.add(baoyu);        shops.add(longxia);        // 2 生成JSON数据        Gson gson = new Gson();        String json = gson.toJson(shops);        // 3 展示数据        tv_gson_orignal.setText(shops.toString());        tv_gson_last.setText(json);    }



五、FastJson解析



(1)将json格式的字符串{}解析为对象

    private void jsonToJavaObjectByFastJson() {        // 1 获取或创建json数据        String json = "{\n" +                "\t\"id\":2, \"name\":\"大虾\", \n" +                "\t\"price\":12.3, \n" +                "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" +                "}\n";        // 2 解析JSON数据        ShopInfo shopInfo = JSON.parseObject(json, ShopInfo.class);        // 3 显示数据        tv_fastjson_orignal.setText(json);        tv_fastjson_last.setText(shopInfo.toString());    }


(2)将json字符串解析成对象的List

    private void jsonToJavaListByFastJson() {        // 1 获取或创建json数据        String json = "[\n" +                "    {\n" +                "        \"id\": 1,\n" +                "        \"imagePath\": \"http://192.168.10.165:8080/f1.jpg\",\n" +                "        \"name\": \"大虾1\",\n" +                "        \"price\": 12.3\n" +                "    },\n" +                "    {\n" +                "        \"id\": 2,\n" +                "        \"imagePath\": \"http://192.168.10.165:8080/f2.jpg\",\n" +                "        \"name\": \"大虾2\",\n" +                "        \"price\": 12.5\n" +                "    }\n" +                "]";        // 2 解析JSON数据        List<ShopInfo> shopInfos = JSON.parseArray(json, ShopInfo.class);        // 3 显示数据        tv_fastjson_orignal.setText(json);        tv_fastjson_last.setText(shopInfos.toString());    }

(3)将java对象转换成json字符串

    private void javaToJsonObjectByFastJson() {        // 1 创建一个Java对象        ShopInfo shopInfo = new ShopInfo(1, "鲍鱼", 250.0, "baoyu");        // 2 生成JSON数据        String json = JSON.toJSONString(shopInfo);        // 3 显示数据        tv_fastjson_orignal.setText(shopInfo.toString());        tv_fastjson_last.setText(json);    }

(4)将java对象List转换成json字符串

    private void javaToJsonArrayByFastJson() {        // 1 创建一个Java集合        List<ShopInfo> shops = new ArrayList<>();        ShopInfo baoyu = new ShopInfo(1, "鲍鱼", 250.0, "baoyu");        ShopInfo longxia = new ShopInfo(2, "龙虾", 251.0, "longxia");        shops.add(baoyu);        shops.add(longxia);        // 2 生成JSON数据        String json = JSON.toJSONString(shops);        // 3 显示JSON数据        tv_fastjson_orignal.setText(shops.toString());        tv_fastjson_last.setText(json);    }






原创粉丝点击