JSON

关于JSONObject与GSON解析JSON数据详解

字号+ 作者:H5之家 来源:H5之家 2017-10-02 10:02 我要评论( )

一、JSON简介 我们之前已经掌握了 XML 格式数据的解析方式,那么接下来我们要去学习一下如何解析 JSON 格式的数据,在学习之前,我们先将这两者做一个简单的比较

> 软件编程 > 安卓开发 >

关于JSONObject与GSON解析JSON数据详解 2017-09-25 14:46 出处:清屏网 人气: 

一、JSON简介

我们之前已经掌握了 XML 格式数据的解析方式,那么接下来我们要去学习一下如何解析 JSON 格式的数据,在学习之前,我们先将这两者做一个简单的比较。

XML与JSON的对比:

  • JSON和XML的数据可读性基本相同
  • JSON和XML同样拥有丰富的解析手段
  • JSON相对于XML来讲,数据的体积小
  • JSON与JavaScript的交互更加方便
  • JSON对数据的描述性比XML较差
  • JSON的速度要远远快于XML
  • 总之,比起 XML, JSON 的主要优势在于它的体积更小,在网络上传输的时候可以更省流量。但缺点在于,它的语义性较差,看起来不如 XML 直观。

    (1)JSON 的格式规范

    就像协议一样,JSON 也是有一套规范的,毕竟服务端和客户端双方一般来讲都是通过 JSON 字符串来传递数据的。

    它的语法规则如下:

  • 数据在“名称/值”对中;
  • 数据由逗号分隔;
  • 花括号保存对象;
  • 方括号保存数组;
  • (2)JSON数据的书写格式范例 [ { "id":"1","name":"WGH","age":"18" }, { "id":"2","name":"WillFlow","age":"16" } ] (3)JSON校验工具

    我们除了解析JSON还可以自己拼接JSON,当然如果你自己拼了一个JSON字符串又不知道对不对, 可以用校验工具进行校验,比如: 点击这里 ,然后把自己拼接的JSON字符串贴上去,就可以校验正确与否了。

    (4)Android给我们提供的JSON解析类 这些JSON解析类的API都存在于org.json包下,而我们用到的类有下面这些:
  • JSONObject: JSON对象,可以完成Json字符串与Java对象的相互转换
  • JSONArray: JSON数组,可以完成Json字符串与Java集合或对象的相互转换
  • JSONStringer: JSON文本构建类,这个类可以帮助快速和便捷的创建JSON text, 每个JSONStringer实体只能对应创建一个JSON text
  • JSONTokener:JSON解析类
  • JSONException:JSON异常
  • 二、用 JSONObject 解析 JSON 格式数据 首先在MainActivity中定义一个JSON 字符串常量,代码如下: private static final String JSON = "[\n" + " {\"id\":\"1\",\"version\":\"1.5\",\"name\":\"Apple\"},\n" + " {\"id\":\"2\",\"version\":\"1.6\",\"name\":\"WillFlow\"},\n" + " {\"id\":\"3\",\"version\":\"1.7\",\"name\":\"WGH\"}\n" + "]";

    这样我们就把 JSON 格式的数据准备好了,下面就开始在 Android 程序中解析这些数据。

    修改 MainActivity 中的代码,如下所示: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); parseJSONWithJSONObject(JSON); } private void parseJSONWithJSONObject(String jsonData) { try { JSONArray jsonArray = new JSONArray(jsonData); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String id = jsonObject.getString("id"); String name = jsonObject.getString("name"); String version = jsonObject.getString("version"); Log.i(TAG, "id : " + id); Log.i(TAG, "name : " + name); Log.i(TAG, "version : " + version); Log.i(TAG, "————————————————————"); } } catch (Exception e) { e.printStackTrace(); } }

    可以看到,解析 JSON 的代码真的是非常简单,由于我们定义的是一个 JSON 数组,因此这里首先是将数据传入到了一个 JSONArray 对象中,然后循环遍历这个 JSONArray,从中取出的每一个元素都是一个 JSONObject 对象,每个 JSONObject 对象中又会包含 id、 name 和 version 这些数据。接下来只需要调用 getString() 方法将这些数据取出,并打印出来即可。

    编译运行查看日志数出

    三、用 GSON 解析 JSON 格式数据

    如何你认为使用 JSONObject 来解析 JSON 数据已经非常简单了,那你就太容易满足了。谷歌提供的 GSON 开源库可以让解析 JSON 数据的工作简单到让你不敢想象的地步,那我们肯定是不能错过这个学习机会的。

    首先,在Gradle中配置如下依赖: dependencies { ...... compile 'com.google.code.gson:gson:2.8.1' }

    这时候GSON框架就加载好了,我们需要手动同步一下。

    如果你的 Android Studio 中没有安装GSON插件的话,可以这样安装:

    完成之后重启 Android Studio 即可。

    那么 GSON 库究竟是神奇在哪里呢?其实它主要就是可以将一段 JSON格式的字符串自动映射成一个对象,从而不需要我们再手动去编写代码进行解析了,比如说一段 JSON 格式的数据如下所示:

    {"name":"Tom","age":20}

    那我们就可以定义一个 Person 类,并加入 name 和 age 这两个字段,然后只需简单地调用如下代码就可以将 JSON 数据自动解析成一个 Person 对象了:

    Gson gson = new Gson(); Person person = gson.fromJson(jsonData, Person.class);

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • google Gson学习笔记及与json

      google Gson学习笔记及与json

      2017-10-02 16:05

    • JSON基础学习

      JSON基础学习

      2017-10-01 17:06

    • Json.Net学习 异常处理

      Json.Net学习 异常处理

      2017-10-01 14:02

    • Json详解与使用

      Json详解与使用

      2017-10-01 13:05

    网友点评