Android json的一些学习

JSON的定义:

   一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.org

JSON Vs XML

1.JSON和XML的数据可读性基本相同

2.JSON和XML同样拥有丰富的解析手段

3.JSON相对于XML来讲,数据的体积小

4.JSON与JavaScript的交互更加方便

5.JSON对数据的描述性比XML较差

6.JSON的速度要远远快于XML

json解析类

android的json解析部分都在包org.json下,主要有以下几个类:


  • JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External: 应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{“JSON”: “Hello, World”},最外被大括号包裹,其中的Key和Value被冒号”:”分隔)。其对于内部(Internal)行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:new JSONObject().put(“JSON”, “Hello, World!”),在Key和Value之间是以逗号”,”分隔。Value的类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object 。

  • JSONStringer:json文本构建类 ,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于 格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。

  • JSONArray:它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如: [value1,value2,value3],大家可以亲自利用简短的代码更加直观的了解其格式)。这个类的内部同样具有查询行为, get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。

  • JSONTokener:json解析类

  • JSONException:json中用到的异常

那么现在你是不是了解了一些关于Json的乱七八糟的东西呢,好的。现在开始我们的实例来进一步的学习一些Json的知识点。
首先在这里的话先拿到一个Json的API接口,类型的API接口在网上也可以找到很多,自己可以去试试。

这里的话说一下实例要实现的一个目的:将一个json的url地址解析成为一个Android listview可以去加载的Bean 集合。

JSON API接口

然后你可以用谷歌浏览器来打开它(先到Google的扩展插件中下载一个叫JSON-handle或者是JSONView的解析工具来解析你的json接口)。

解析效果图
效果图

首先新建一个bean用来保存里面的元素

package com.example.asynctask_test;
public class NewsBean {
    public String NewsIcoUrl;
    public String NewsContent;
    public String NewsTitle;

}

然后将一个定义好的url地址交给下面的getJsonDate方法来解析json,

private static String URL = "http://www.imooc.com/api/teacher?type=4&num=30";
private List<NewsBean> getJsonDate(String url) {
        // 声明List<NewsBean>并初始化
        List<NewsBean> newBeanList = new ArrayList<NewsBean>();
        try {
            String jsonString = readstream(new URL(url).openStream());
            // URL(url).openStream() 和url.OpenConnection().getInputStream()相同,可根据URl直接获取网络资源数据,
            // 返回类型为InputStream类型
            Log.d("xxxxxxxxx", jsonString);
        return newBeanList;

    }
private String readstream(InputStream is) {// 1、计算机可以识别的基本格式:字节
        InputStreamReader isr;// 2、可见的字符流
        BufferedReader bfr;// /3、可以高效读取的字符串
        String result = "";

        try {
            String line = "";//一行一行的读出来
            // 将InputStream类的字节流转换成字符流
            bfr = new BufferedReader(new InputStreamReader(is, "utf-8"));
            while ((line = bfr.readLine()) != null) {
                result += line;

            }
        } catch (UnsupportedEncodingException e) {
            //
            e.printStackTrace();
        } catch (IOException e) {
            //
            e.printStackTrace();
        }

        return result;// 这里的result是可以高效读取的JSON格式的字符串
    }

现在我们就得到了一个json格式字符串

{
    "status": 1,
    "data": [
        {
            "id": 1,
            "name": "Tony老师聊shell——环境变量配置文件",
            "picSmall": "http://img.mukewang.com/55237dcc0001128c06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/55237dcc0001128c06000338.jpg",
            "description": "为你带来shell中的环境变量配置文件",
            "learner": 12312
        },
        {
            "id": 2,
            "name": "数学知识在CSS动画中的应用",
            "picSmall": "http://img.mukewang.com/55249cf30001ae8a06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/55249cf30001ae8a06000338.jpg",
            "description": "数学知识与CSS结合实现酷炫效果",
            "learner": 45625
        },
        {
            "id": 3,
            "name": "Oracle数据库开发必备利器之PL/SQL基础",
            "picSmall": "http://img.mukewang.com/5523711700016d1606000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/5523711700016d1606000338.jpg",
            "description": "Oracle数据库高级开发必备的基础。",
            "learner": 41236
        },
        {
            "id": 4,
            "name": "Android见证消息推送时刻进阶篇",
            "picSmall": "http://img.mukewang.com/551e470500018dd806000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/551e470500018dd806000338.jpg",
            "description": "Android消息推送就在眼前,Come on",
            "learner": 45456
        },
        {
            "id": 5,
            "name": "Avalon探索之旅基础教程——复杂绑定",
            "picSmall": "http://img.mukewang.com/551de0570001134f06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/551de0570001134f06000338.jpg",
            "description": "前端迷您MVVM框架,Avalon复杂绑定属性篇。",
            "learner": 56556
        },
        {
            "id": 6,
            "name": "Android-Service系列之断点续传下载",
            "picSmall": "http://img.mukewang.com/552640c300018a9606000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/552640c300018a9606000338.jpg",
            "description": "想升职加薪么?本章课程你值得拥有",
            "learner": 48996
        },
        {
            "id": 7,
            "name": "JUnit—Java单元测试必备工具",
            "picSmall": "http://img.mukewang.com/551b92340001c9f206000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/551b92340001c9f206000338.jpg",
            "description": "Java单元测试利器!",
            "learner": 13210
        },
        {
            "id": 8,
            "name": "细说Java多线程之内存可见性",
            "picSmall": "http://img.mukewang.com/5518c3d7000175af06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/5518c3d7000175af06000338.jpg",
            "description": "用两种方式实现内存可见性",
            "learner": 15051
        },
        {
            "id": 9,
            "name": "CSS动画实用技巧",
            "picSmall": "http://img.mukewang.com/551b98ae0001e57906000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/551b98ae0001e57906000338.jpg",
            "description": "教你使用CSS实现惊艳的动画效果!",
            "learner": 15210
        },
        {
            "id": 10,
            "name": "C++远征之起航篇",
            "picSmall": "http://img.mukewang.com/550b86560001009406000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/550b86560001009406000338.jpg",
            "description": "C++亮点尽在其中",
            "learner": 84545
        },
        {
            "id": 11,
            "name": "Tony老师聊shell——运算符",
            "picSmall": "http://img.mukewang.com/551916790001125706000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/551916790001125706000338.jpg",
            "description": "Tony为你带来shell编程中的运算符!",
            "learner": 18411
        },
        {
            "id": 12,
            "name": "如何使用高德云图在线制作属于你的地图",
            "picSmall": "http://img.mukewang.com/5518ecf20001cb4e06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/5518ecf20001cb4e06000338.jpg",
            "description": "教你迅速使用云图进行基于LBS的开发。",
            "learner": 56432
        },
        {
            "id": 13,
            "name": "鬼斧神工之正则表达式",
            "picSmall": "http://img.mukewang.com/5518bbe30001c32006000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/5518bbe30001c32006000338.jpg",
            "description": "正则表达式是计算机编程语言界的鬼斧神工。",
            "learner": 25210
        },
        {
            "id": 14,
            "name": "如何使用高德Windows Phone SDK进行基于LBS的开发",
            "picSmall": "http://img.mukewang.com/551380400001da9b06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/551380400001da9b06000338.jpg",
            "description": "教你迅速使用WP SDK进行基于LBS的开发",
            "learner": 56445
        },
        {
            "id": 15,
            "name": "canvas实现星星闪烁特效",
            "picSmall": "http://img.mukewang.com/550a33b00001738a06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/550a33b00001738a06000338.jpg",
            "description": "使用HTML5实现轮播图片上的序列帧。",
            "learner": 45658
        },
        {
            "id": 16,
            "name": "如何使用高德JS-API进行基于LBS的开发",
            "picSmall": "http://img.mukewang.com/5513a1b50001752806000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/5513a1b50001752806000338.jpg",
            "description": "教你迅速用高德JS-API进行基于LBS的开发",
            "learner": 15222
        },
        {
            "id": 17,
            "name": "Duang~MySQLi扩展库来袭",
            "picSmall": "http://img.mukewang.com/5513e20600017c1806000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/5513e20600017c1806000338.jpg",
            "description": "Duang~一起开启MySQLi的学习之旅吧!",
            "learner": 46321
        },
        {
            "id": 18,
            "name": "如何使用高德Android SDK进行基于LBS的开发",
            "picSmall": "http://img.mukewang.com/550a78720001f37a06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/550a78720001f37a06000338.jpg",
            "description": "教你迅速使用Android SDK进行基于LBS的开发",
            "learner": 12130
        },
        {
            "id": 19,
            "name": "高德地图组件快速入门",
            "picSmall": "http://img.mukewang.com/550a836c0001236606000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/550a836c0001236606000338.jpg",
            "description": "教你迅速使用地图组件进行基于LBS的开发",
            "learner": 54540
        },
        {
            "id": 20,
            "name": "如何使用高德定位进行开发",
            "picSmall": "http://img.mukewang.com/550a87da000168db06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/550a87da000168db06000338.jpg",
            "description": "教你迅速使用定位进行基于LBS的开发",
            "learner": 45665
        },
        {
            "id": 21,
            "name": "Yahoo军规",
            "picSmall": "http://img.mukewang.com/530f0ef700019b5906000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/530f0ef700019b5906000338.jpg",
            "description": "做为WEB前端攻城师,您必须知道的网站性能优化规则。",
            "learner": 12123
        },
        {
            "id": 22,
            "name": "Ajax全接触",
            "picSmall": "http://img.mukewang.com/549bda090001c53e06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/549bda090001c53e06000338.jpg",
            "description": "由浅入深,循序渐进学习Ajax的相关概念、原理、实现方式和应用方法。",
            "learner": 46456
        },
        {
            "id": 23,
            "name": "jQuery源码解析(DOM与核心模块)",
            "picSmall": "http://img.mukewang.com/547d5a45000156f406000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/547d5a45000156f406000338.jpg",
            "description": "前端架构师的必经之路,揭开框架背后的秘密。",
            "learner": 51456
        },
        {
            "id": 24,
            "name": "用字体在网页中画ICON图标",
            "picSmall": "http://img.mukewang.com/54780ea90001f3b406000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/54780ea90001f3b406000338.jpg",
            "description": "图标恋上字体,就像老鼠爱上大米!",
            "learner": 16456
        },
        {
            "id": 25,
            "name": "CSS3绚丽照片墙",
            "picSmall": "http://img.mukewang.com/547ed1c9000150cc06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/547ed1c9000150cc06000338.jpg",
            "description": "简单CSS3属性轻松实现绚丽照片墙效果。",
            "learner": 26456
        },
        {
            "id": 26,
            "name": "SEO在网页制作中的应用",
            "picSmall": "http://img.mukewang.com/54214727000160e306000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/54214727000160e306000338.jpg",
            "description": "让您快速迈进SEO的门,不容错过!",
            "learner": 12436
        },
        {
            "id": 27,
            "name": "CSS深入理解之absolute",
            "picSmall": "http://img.mukewang.com/54125edc0001ce6306000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/54125edc0001ce6306000338.jpg",
            "description": "全面深入理解CSS的position:absolute声明。",
            "learner": 45345
        },
        {
            "id": 28,
            "name": "玩转KISSY框架",
            "picSmall": "http://img.mukewang.com/548165820001b4b006000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/548165820001b4b006000338.jpg",
            "description": "全网唯一系统讲解KISSY框架从入门到精通的教程。",
            "learner": 11456
        },
        {
            "id": 29,
            "name": "CSS深入理解之float浮动",
            "picSmall": "http://img.mukewang.com/53d74f960001ae9d06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/53d74f960001ae9d06000338.jpg",
            "description": "主要介绍了浮动属性的前世与今生,糟粕与精华,误解与滥用等。",
            "learner": 45656
        },
        {
            "id": 30,
            "name": "CSS未来",
            "picSmall": "http://img.mukewang.com/54c87c73000150cf06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/54c87c73000150cf06000338.jpg",
            "description": "CSS之父Bert Bos带来的分享。",
            "learner": 13436
        }
    ],
    "msg": "成功"
}

下面就讲得到的json格式的字符串存入封装好的bean中。

private List<NewsBean> getJsonDate(String url) {
        // 声明List<NewsBean>并初始化
        List<NewsBean> newBeanList = new ArrayList<NewsBean>();
        try {
            String jsonString = readstream(new URL(url).openStream());
            Log.d("jair", jsonString);
            JSONObject jsonObject;
            NewsBean newsBean;

            try {
                jsonObject = new JSONObject(jsonString);
                JSONArray jsonArray = jsonObject.getJSONArray("data");
                // 通过如下for循环就可以将jsonString原始字符数据导入到每个NewsBean对象中。
                for (int i = 0; i < jsonArray.length(); i++) {
                    jsonObject = jsonArray.getJSONObject(i);
                    newsBean = new NewsBean();
                    // 从jsonObject中得到每个元素放入到我们封装好的newsBean中
                    newsBean.NewsIcoUrl = jsonObject.getString("picSmall");
                    newsBean.NewsTitle = jsonObject.getString("name");
                    newsBean.NewsContent = jsonObject.getString("description");
                    newBeanList.add(newsBean);
                    // 最后通过newsBeanList.add(newsBean)组成一个List<NewsBean>对象,这是构成Adapter适配器的原始数据。

                }

            } catch (JSONException e) {
                //
                e.printStackTrace();
            }

        } catch (MalformedURLException e) {
            //
            e.printStackTrace();
        } catch (IOException e) {
            //
            e.printStackTrace();
        }
        return newBeanList;
    }

现在我们就得到了一个可以在适配器中使用的List集合。

这里附上实例的源码
下载地址

实现效果图

这里写图片描述“`

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值