• Android JSON数据解析


    1.Json概念以及与XML的比较

    1)Json是什么?

    答:JavaScript Object Natation, 一种轻量级的数据交换格式, 与XML一样, 广泛被采用的客户端和服务端交互的解决方案!具有良好的可读和便于快速编写的特性。

    2)Json与XML的比较

    • JSON和XML的数据可读性基本相同;
    • JSON和XML同样拥有丰富的解析手段
    • JSON相对于XML来讲,数据的体积小
    • JSON与JavaScript的交互更加方便
    • JSON对数据的描述性比XML较差
    • JSON的速度要远远快于XML

    PS:上述来自于百度~简单点说Json的优点:体积小,节省流量,只是不如XML直观,可读性 稍微差一点而已!

    3)Json的格式规范

    就像协议一样,肯定是有一套规范的,毕竟双方都是通过Json字符串来传递数据,语法规则如下: 数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组; 而Json数据的书写格式:名称/值对 比如:"person":"coder-pig" 比如一个简单的Json字符串:

    [
        { "id":"1","name":"基神","age":"18" },
        { "id":"2","name":"B神","age":"18"  },
        { "id":"3","name":"曹神","age":"18" }
    ]
    

    2.Android给我们提供的Json解析类

    这些API都存在于org.json包下,而我们用到的类有下面这些:

    • JSONObject: Json对象,可以完成Json字符串与Java对象的相互转换
    • JSONArray: Json数组,可以完成Json字符串与Java集合或对象的相互转换
    • JSONStringer: Json文本构建类,这个类可以帮助快速和便捷的创建JSON text, 每个JSONStringer实体只能对应创建一个JSON text
    • JSONTokener:Json解析类
    • JSONException:Json异常

    3.代码示例:解析Json字符串:

    PS:这里我们就不另外写servlet或者请求网站,直接把Json写到字符串中来解析,模拟下就算了!

    1)简单的Json字符串解析示例:

    我们解析的是上面这个简单的Json,首先我们来写一个POJO类:

    Person.java

    /**
     * Created by Jay on 2015/9/8 0008.
     */
    public class Person {
        private String id;
        private String name;
        private String age;
        public void setId(String id){
            this.id = id;
        }
        public String getId(){
            return this.id;
        }
        public void setName(String name){
            this.name = name;
        }
        public String getName(){
            return this.name;
        }
        public void setAge(String age){
            this.age = age;
        }
        public String getAge(){
            return this.age;
        }
        @Override
        public String toString() {
            return this.name + "~年方:" + this.age;
        }
    }
    

    写一个解析上述Json字符串的方法:

    private void parseEasyJson(String json){
        persons = new ArrayList<Person>();
        try{
            JSONArray jsonArray = new JSONArray(json);
            for(int i = 0;i < jsonArray.length();i++){
                JSONObject jsonObject = (JSONObject) jsonArray.get(i);
                Person person = new Person();
                person.setId(i+"");
                person.setName(jsonObject.getString("name"));
                person.setAge(jsonObject.getString("age"));
                persons.add(person);
            }
        }catch (Exception e){e.printStackTrace();}
    }
    

    运行效果图

    嘿嘿,很简单是吧,接下来我们找一个复杂点的!

    2)复杂的Json字符串解析示例:

    如果是这样的Json字符串呢?

    呵呵,那就需要我们一步步来扣数据了:

    解析代码如下

    private void parseDiffJson(String json) {
        try {
            JSONObject jsonObject1 = new JSONObject(json);
            Log.e("Json", json);
            JSONArray jsonArray = jsonObject1.getJSONArray("ch");
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject = (JSONObject) jsonArray.get(i);
                //取出name
                String sname = jsonObject.getString("names");
                JSONArray jarray1 = jsonObject.getJSONArray("data");
                JSONArray jarray2 = jsonObject.getJSONArray("times");
                Log.e("Json", sname);
                Log.e("Json", jarray1.toString());
                Log.e("Json", jarray2.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    
    }
    

    看下打印的Log:

    当然还有一层,有兴趣你就自己扣...

  • 相关阅读:
    栈溢出笔记1.3 准备Shellcode
    聊聊手游的那些惊喜与惊吓
    GIS+=地理信息+容器技术(4)——Docker执行
    与AQS有关的并发类
    HDU 2102 A计划
    生产系统ELK日志采集系统
    datagrip离线安装驱动jar
    oracle无效索引重建
    18年总结及19年展望
    shell符号解释
  • 原文地址:https://www.cnblogs.com/foxy/p/7682057.html
Copyright © 2020-2023  润新知