Android使用GSON和FASTJSON解析服务器返回的JSON数据

2024-01-29 02:18

本文主要是介绍Android使用GSON和FASTJSON解析服务器返回的JSON数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在一个app中,没办法避免的就是网络请求这一块,那么我们在与服务器连接,发送请求的时候,就会接收到服务器返回的结果,这种结果可以是XML格式,但更多的是JSON,所以我们在客户端就必须解析JSON数据,就拿登录这一个功能举例,用户输入账号密码,客户端发送登录请求,服务器接受请求并响应发送结果返回客户端,客户端通过解析JSON数据来判断是否登录成。

首先我们在使用GSON或者FASTJSON之前都可以先看看官方的文档来了解这两个解析JSON的工具是如何实现其功能的(GSON是谷歌的,而FASTJSON是阿里巴巴的敲打

GSON文档相关:http://www.oschina.net/p/google-json

FASTJSON文档相关:https://github.com/alibaba/fastjson


在GSON和FASTJSON中,一般都会通过创建JavaBean来通过get方法获取JSON内部的数据

例如下面这个User.class

<span style="font-size:14px;">public class User{private String type;private String message;private int code;public String gettype() {return type;}public void settype(String type) {this.type = type;}public String getmessage() {return message;}public void setmessage(String message) {this.message = message;}public int getcode(){return code;}public void srtcode(int code){this.code = code;}}
</span>
然后再在网络请求成功后,如下调用:(其中的code对应的结果代码是由接口后台设置而定)

<span style="font-size:14px;">private void loginAsyncHttpClientPost(String userName,String userPass) {// 发送请求到服务器AsyncHttpClient client = new AsyncHttpClient();String url = getString(R.string.user_login_post_url);//请求接口// 创建请求参数RequestParams params = new RequestParams();params.put("stuid", userName);params.put("password", userPass);// 执行post方法client.post(url, params, new AsyncHttpResponseHandler() {@Overridepublic void onSuccess(int statusCode, Header[] headers,byte[] responseBody) {//解析返回的JSON数据<span style="color:#ff0000;">String jsonData = new String(responseBody);Gson gson = new Gson();User user = gson.fromJson(jsonData, User.class);</span>if(user.getcode() == 1){Toast toast2 = Toast.makeText(getApplicationContext(),"登录成功!",Toast.LENGTH_SHORT);toast2.show();Intent intent3 = new Intent(LoginActivity.this, MainActivity.class);startActivity(intent3);LoginActivity.this.finish();}else if(user.getcode() == 2){AlertDialog alert = new AlertDialog.Builder(LoginActivity.this).create();//设置Title的内容alert.setTitle("错误");//设置Content来显示一个信息alert.setMessage("抱歉!您的账号与密码不匹配,请确认后重新输入!");//显示弹窗alert.show();}}@Overridepublic void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error) {// 打印错误信息error.printStackTrace();}});}
</span>

同样的FASTJSON也可以按这种写法,此外,还有一种简单的写法,即使用FASTJSON 的写法

直接贴代码:

<span style="font-size:14px;">public void onSuccess(int statusCode, Header[] headers,byte[] responseBody) {//GSON解析返回的JSON数据String jsonData = new String(responseBody);JSONObject user = JSON.parseObject(jsonData);Log.e("***登录信息返回***",""+user.get("message"));
</span>
通过这种写法不用再新增一个java类就可以解析JSON数据,如果返回的JSON是多层嵌套的,写法如下:

<span style="font-size:14px;">            public void onSuccess(int statusCode, Header[] headers,byte[] responseBody) {//解析返回的JSON数据String jsonData = new String(responseBody);JSONObject msg = JSON.parseObject(jsonData);//msg为第一层json数据JSONObject psmg = msg.getJSONObject("data");//pmsg为第二层个人详细信息json数据Log.e("***查询第一层信息返回结果***",""+msg.get("message"));Log.e("***查询第二层信息返回结果***",""+psmg.getJSONObject("username"));</span>


这种写法在使用的时候,已知的数据类型,即假设已知JSON返回的code是INT类型,那么我们在使用的时候应写成msg.getInteger("code") == 0来获取,不然可能会出现数据类型不符合的问题,假设不知道类型或者返回的是data,那么就用msg.getJSONObject("data")来获取它。

此外,本人为在校学生,如果有不同或者是更好的写法亦或者是错误的地方,还请指出和多多分享,共勉~奋斗





这篇关于Android使用GSON和FASTJSON解析服务器返回的JSON数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/655460

相关文章

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设