商城首页欢迎来到中国正版软件门户

您的位置:首页 >7.2.2 Android JSON数据解析

7.2.2 Android JSON数据解析

  发布于2026-08-12 阅读(0)

扫一扫,手机访问

本节引言:

相信大家肯定对 Json 不陌生吧,我们和服务器交互一般用得较多的数据传递方式都是 Json 字符串的形式, 保存对象,我们也可以写成一个 Json 字符串然后存储!解析 Json 不知道你用的是 Gson,Fastjson,jackson 等,不过本节我们并不会去用这些第三方的解析库,而是使用 Android 自带的 Json 解析器来解析 Json! 好的,开始本节内容!

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

1)Json是什么?

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

2)Json与XML的比较

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

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

3)Json的格式规范

和协议一样,JSON 也不是随便写的,它本身有一套明确的规范。说到底,通信双方是通过 Json 字符串来传递数据的,所以语法规则必须统一:数据以名称/值对的形式存在不同数据之间用逗号分隔对象放在花括号中数组放在方括号中; 至于 Json 数据的书写方式,核心就是名称/值对,比如:"person":"coder-pig" 下面来看一个最简单的 Json 字符串:

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

我们除了解析Json还可以自己拼接Json,当然如果你自己拼了一个Json字符串又不知道对不对, 可以百度随便找一个校验工具,比如: http://www.runoob.com/jsontool把Json字符串贴上去,校验下就好!

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

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

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

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

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

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

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

Person.ja va

/**
 * 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();
    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:

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

本节小结:

说白了,Android 自带的这个原生 Json 解析类,用起来确实得一点点“抠”细节,急是急不来的。当然,思路也可以反过来走,直接自己把 JSON 拼出来。受限于篇幅,这里就先按这种方式慢慢拼接。至于更进阶的部分,等学到第三方 Json 解析库之后,整个处理过程就会轻松不少。好了,这一节先讲到这里。

本文转载于:https://www.runoob.com/w3cnote/android-tutorial-json.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注