Android 网络获取数据之Json解析

1.简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

JSON数据作为目前网络中主流的数据传输格式之一,应用十分广泛。

2. Json数据格式(两种)

Json数据有两种格式:

(1)对象 :对象表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,…}的键值对的结构。 如:{id:10086,name:张三}
(2)数组:数组表示为“[ ]” 括起来的内容,数据结构为 [ value, value,value,…] 的单值形式。 如:[张三,李四、王五]

在网络获取的数据中,一般表现为两种格式嵌套的形式。

3.Json数据的常用类和接口

    JSONObject  --------->  json对象
    JSONArray   ----------> json对组对象

4. Json 的解析方式

(1)采用java 原生的Json解析

(2) Google 提供的Gson解析方式

(3) Alibaba 提供的FastJson解析方式

5.下面分别使用Json的三种解析方式来解析下面的json字符串

{
    "data":[
        {
            "id":"5613",
            "title":"茶百科androidV1.2新功能简介",
            "name":"茶百科androidV1.2新功能简介",
            "link":"http://sns.maimaicha.com/news/detail/5613",
            "content":"1、   更新页面布局,增加首次登陆提示页。 2、    增加栏目导航,按照分类列表展示。"
        },
        {
            "id":"5697",
            "title":"雅安茶”旺季被腰斩 茶企建“爱心茶园”解困",
            "name":"雅安茶”旺季被腰斩 茶企建“爱心茶园”解困",
            "link":"http://sns.maimaicha.com/news/detail/5697",
            "content":"雅安,一个在地震中被全国关注的城市。它是茶马古道的起源地,是世界上人工种茶最早的地方,有着深厚的茶文化底蕴。"
        }
    ],
    "errorMessage":"success"
}

5.1 首先对上面的Json数据进行格式分析

(1)最外层:一个大括号包裹的 Json 对象,根据{key,value }格式,key=data ; value=括号中包裹的数组;

(2)第二层:一个中括号包裹的Json数组里面有两个对象(绿色部分)表示的值,根据 [ value,value,value..]格式,value=大括号包裹的 id,title,name,link和content;

(3)第三层:可以把里面的value值,封装成一个对象来处理。

5.2 建立一个类来对( id,title,name,link和content)等进行封装

public class Tea {
    private String id;
    private String title;
    private String link;
    private String content;

    public Tea() {
        super();
    }

    public Tea(String id, String title, String link, String content) {
        super();
        this.id = id;
        this.title = title;
        this.link = link;
        this.content = content;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getLink() {
        return link;
    }
    public void setLink(String link) {
        this.link = link;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String toString() {
        return "Tea [id=" + id + ", title=" + title + ", link=" + link
                + ", content=" + content + "]";
    }
}

5.3 原生Json 解析

public static List<Tea> getJsonData(String json){
        List<Tea> list=new ArrayList<>();
//整个json字符串为一个 JSONObject 对象
            JSONObject jsonObject=new JSONObject(json);
 // 返回data 对应的value值:这里表示[]里面的内容
            JSONArray jsonArray=jsonObject.getJSONArray("data");

            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject object=jsonArray.getJSONObject(i);
                String id=object.getString("id");
                String title=object.getString("title");
                String name=object.getString("name");
                String link=object.getString("link");
                String content=object.getString("content");
                Tea tea=new Tea(id,title,name,link,content);
                list.add(tea);
            }
            return list;
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

5.4 Gson解析

首先要添加关于Gson 的第三方包 ,eclipse可以到网上下载jar包,然后添加依赖。使用 Android studio开发的可以直接在 File/ Project Structure/Dependencies中选择com.google.code.gson:gson:2.7 然后添加依赖即可。添加成功如下所示:

这里写图片描述

Gson 解析的 java 代码

public static List<Tea> parseJSON(String json) {
        List<Tea> list = new ArrayList<>();
        try {
            JSONObject jsonObject = new JSONObject(json);
            JSONArray array = jsonObject.getJSONArray("data"); //java提供的原生的类

             //Gson解析
            Gson gson = new Gson();
            TypeToken<List<Tea>> type = new TypeToken<List<Tea>>() {
            };
            list = gson.fromJson(array.toString(), type.getType());
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }

5.5 FastJson解析

FastJson也要引入第三方的工具包,eclipse可以下载然后添加依赖;Android Studio可以直接在File/ Project Structure/Dependencies 中找到 com.alibaba:fastjson:1.2.14 添加依赖即可,添加成功如下图:

这里写图片描述

FastJson 解析代码

 public static List<Tea> parseJSONData(String json){
        List<Tea> list = new ArrayList<>();
        try {
            JSONObject jsonObject = new JSONObject(json);
            JSONArray array = jsonObject.getJSONArray("data");//java原生的类

          //FastJson 解析
            list=JSON.parseArray(array.toString(), Tea.class);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }

6. 总结

(1)原生的Json解析,需要根据json数据的结构,一步步的把数据获取出来,然后根据数据进行封装。

(2)Google 的 Gson 解析和 Alibaba 的FastJson解析,都可以把需要封装的部分直接从json数据中提取出来,不需要把具体数据提取出来再进行封装。相比起来Gson解析和FastJson解析,比原生的Json解析更加便捷。建议使用后两种。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值