浅谈Android项目——JSON解析(4种解析技术详解)

  

json简介
1。概念:json全称是javaScript对象表示法是一种并轻量级的数据交换格式。

  

2。特点:

  

1。本质就是具有特定格式的字符串

  

2. json完全独立于编程语言

  

3. json比xml数据传输的有效性要高出很多

  

Android系统也原生的提供了JSON解析的API,但是它的速度很慢,而且没有提供简介方便的接口来提高开发者的效率和降低出错的可能。因此,通常情况下,我们都会选择其他优秀的JSON解析实现,用以替代系统的API,目前JSON解析的开源实现主要包括一下三种:

  

Gson
JackJson
FastJson
JSON对象:

  

JSON数组:

  

先简单的来介绍一下原生的JSON解析API:
他的特点是很麻烦,对于复杂的JSON数据解析很容易出错

  

使用:   

解析JSON对象的API: JsonObject
JsonObject (JSON字符串);将JSON字符串解析成JSON对象,

  

getXxx(字符串名称),根据名字在json对象中得到相应的价值值;

  
 <代码> ObjectanalysisTest私人字符串(字符串String) {
  尝试{
  JSONObject JSONObject=new JSONObject(字符串);
  字符串名称=jsonObject.getString(“名字”);
  int年龄=jsonObject.optInt(“时代”);
  字符串性=jsonObject.optString(“性”);
  回报”的名字:“+名称+“年龄:”+年龄+“性:”+性;
  
  }捕捉(JSONException e) {
  e.printStackTrace ();
  }
  返回null;
  } 
  

解析Json数组的API: JSONArray JSONArray
(Json字符串);将Json字符串解析成Json数组;

  

int长度();得到json数组中元素的个数;

  

getXxx(字符串名称),根据名字得到json数组中对应的元素数据。

  
 <代码> ArrayanalysisTest私人字符串(字符串String) {
  尝试{
  获取数组JSONArray=new(字符串);
  StringBuffer缓冲=new StringBuffer ();
  for (int i=0;我& lt;array.length ();我+ +){
  JSONObject对象=array.getJSONObject(我);
  字符串名称=object.getString(“名字”);
  int年龄=object.optInt(“时代”);
  字符串性=object.optString(“性”);
  日志。e(“1”、“名称:”+名称+“年龄:”+年龄+“性:”+性);
  缓冲区。附加(“名字:”+名称+“年龄:”+年龄+“性:”+性别+“\ n”);
  
  }
  返回buffer.toString ();
  }捕捉(JSONException e) {
  e.printStackTrace ();
  }
  返回null;
  
  } 
  

GSON
GSON是谷歌出品的Json解析函数库,可以将Json字符串反序列化为对应的Java对象,或者反过来将Java对象序列化为对应的字符串,免去了开发者手动通过JSONObject JSONArray和将Json字段逐个进行解析的烦恼,也减少了出错的可能性,增强了代码的质量。使用GSON解析时候,对应的Java实体类无需要使用注解进行标记,支持任意复杂Java对象包括没有源代码的对象。

  

定义json对应的类的步骤

  

先定义成员变量名称
再定义成员变量的类型
再定义泛型的类
从外向类逐渐推荐

  

GSON的特点是:解析没那么麻烦,代码量简洁,可以很方便地解析复杂的Json数据,而且谷歌官方也推荐使用。

  

jar包的下载地址:https://mvnrepository.com/artifact/com.google.code.gson/gson

  

同时Android工作室用开发的话,可以通过Gradle,直接添加依赖,不用下载jar包,特别方便,如下:

  

实现集团:“com.google.code。gson’,名字:“gson”版本:“2.8.0 '
1。创建GSON对象
GSON GSON=new GSON ();
2。创建JavaBean类

  
 <代码>公共int getAge () {
  返回年龄;
  }
  
  公共空间setAge (int年龄){
  这一点。年龄=年龄;
  }
  
  公共字符串getName () {
  返回名称;
  }
  
  公共空间setName(字符串名称){
  this.name=名称;
  }
  
  公共字符串getSex () {
  返回性;
  }
  
  公共空间setSex(字符串性){
  这一点。性别=性;
  }
  
  公共字符串getAddress () {
  返回地址;
  }
  
  公共空间setAddress(字符串地址){
  这一点。地址=地址;
  }
  
  私人int年龄;
  私人字符串名称;
  私人字符串性;
  私人字符串地址;
  
  公共字符串getLike () {
  返回;
  }
  
  公共空间setLike (String) {
  这一点。=喜欢;
  }
  
  私人的字符串;
  公共字符串Usershow () {
  
  日志。e(“用户”、“名字:”+名称+“年龄:”+年龄+”性别:" +性别+”地址:”+地址+”个人爱好:" +);
  返回“名字:“+名字+”年龄:”+年龄+”性别:" +性别+”地址:”+地址+”个人爱好:”+;
  
  }

浅谈Android项目——JSON解析(4种解析技术详解)