当前位置:

首页 > 系统应用 > 7.2.2 Android JSON数据解析

7.2.2 Android JSON数据解析

本文目录

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

    本节引言:

    相信大家肯定对 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 解析库之后,整个处理过程就会轻松不少。好了,这一节先讲到这里。

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    系统应用 Android
    相关文章 更多
    win10微软账户如何取消开机密码直接进桌面
    win10微软账户如何取消开机密码直接进桌面

    想在Win10开机时跳过密码直接进入桌面?本文详解Microsoft账户下的PIN设置、本地账户切换及netplwiz自动登录配置,并区分开机验证与锁屏恢复设置,助你安全高效地优化登录体验。

    win10取消开机密码后,系统自动更新会重置设置吗?
    win10取消开机密码后,系统自动更新会重置设置吗?

    Win10系统更新后开机又要求输入密码?这通常不是密码被重置,而是自动登录设置或Windows Hello策略被更改。本文详解如何区分密码问题与登录配置问题,检查账户状态及组织策略,并安全恢复开机自动进入桌面的设置。

    XMind iOS版与安卓版功能有什么区别?
    XMind iOS版与安卓版功能有什么区别?

    XMind iOS版和安卓版都能完成完整的思维导图编辑,但在文件保存、导出格式及系统分享流程上存在差异。本文详解两端在实际使用中的不同点,帮助跨平台用户优化工作流。

    微软官网下载Win10 64位官方ISO镜像的完整步骤
    微软官网下载Win10 64位官方ISO镜像的完整步骤

    详解如何从微软官网获取纯净的Windows 10 64位ISO镜像文件,包括正确的下载入口、版本与语言选择技巧,以及下载后的完整性校验步骤,确保系统安装源安全可靠。

    Linux如何开启端口号?开放端口命令详解
    Linux如何开启端口号?开放端口命令详解

    详细讲解Linux如何开启端口号以及常用的开放端口命令。

    docker容器自动重启怎么解决 排查原因与修复方法
    docker容器自动重启怎么解决 排查原因与修复方法

    遇到Docker容器频繁自动重启?本文提供从查看容器日志、解读退出代码到配置Restart Policy的完整排查与修复方案,确保服务稳定性。

    Linux设置静态路由命令与永久生效教程
    Linux设置静态路由命令与永久生效教程

    学习如何在Linux中使用命令行添加临时静态路由,并通过修改网络配置文件实现重启后依然有效的永久静态路由设置,涵盖CentOS和Ubuntu的不同配置方法。

    摄像头连接电脑后怎么打开查看实时画面教程
    摄像头连接电脑后怎么打开查看实时画面教程

    摄像头连接电脑后不知如何查看画面?本教程演示如何使用Windows自带的“相机”应用快速调取实时视频流,无需下载额外软件,步骤简单直观,适用于大多数USB及内置摄像头。

    如何在 windows 11 关闭自动关机
    如何在 windows 11 关闭自动关机

    针对 Windows 11 电脑在无人操作时自动关机或重启的问题,本文详解如何通过任务计划程序禁用更新重启任务,并调整电源睡眠策略,从根源解决非预期的自动关机现象。

    android页面跳转屏幕方向改变变量如何解决
    android页面跳转屏幕方向改变变量如何解决

    详解Android应用中处理屏幕旋转导致Activity重建时的变量保存方法,包括使用onSaveInstanceState捆绑包和Jetpack ViewModel架构组件的最佳实践。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。