Android系列学习之JSON解析
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
JSON建构于两种结构:
1.“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
2.值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
JSON具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔;值可以使各种基本数据类型,对象、数组等。
下面学习一下我们怎么去解析一个JSON数据:以解析豆瓣网的一本书的简介为例:http://api.douban.com/v2/book/1220562
利用Android本身自带的org.json.JSONObject解析该数据下的部分数据。
(只解析部分数据)
JSONObject jsonObject = new JSONObject(value); //获取相应的数据类型,后面的字符串为需要获取的数据的键 //获取字符串 String summary = jsonObject.getString("summary"); Log.e("gaosi", "summary=" + summary); //获取JSON对象 JSONObject images = jsonObject.getJSONObject("images"); //从images的JSON 对象当中在解析 String small = images.getString("small"); Log.e("gaosi", "small=" + small); //从JSON对象当中解析出JSON数组 JSONArray tags = jsonObject.getJSONArray("tags"); for (int i = 0; i < tags.length(); i++) { //从JSON数组当中取出JSON对象 JSONObject tag = (JSONObject) tags.get(i); //从取出的对象当中,解析整形数据 int count = tag.getInt("count"); //从取出的对象中解析字符串 String name = tag.getString("name"); Log.e("gaosi", "count=" + count); Log.e("gaosi", "name=" + name); }
解析数据结果:
下面比较一下GSON:GSON是谷歌攻城狮开发的一个开源库。
在使用GSON数据解析JSON数据感觉会比Android系统自带的JSONObject解析来的更容易一些?
Gson gson = new Gson(); //Book为自定义的类,封装了部分JSON数据 //value是需要解析的json数据 Book book = gson.fromJson(value, Book.class);
就两行代码就可以解析出来了!是不是有的不敢相信了呢?
一个json对象视为一个Bean类,json对象的数据视为Bean的属性。
那么Bean对象Book有何乾坤呢?
Book类知识封装了部分JSON 数据,在Book的属性当中值得注意的是属性数据类型类型要与JSON相对应的数据类型一致,属性名要与相对应的JSON数据的键一致。属性名不一致会解析不出数据的。
public class Book { //属性名必须与键保持一致 private String pubdate; private String title; private String summary; private Images images; private ArrayList<com.usc.lilin.jsontest.Tag> tags; //以及复写他们的get set toString方法 }
解析出来的结果:
Fast-JSON :
Fjsonast_JSON :是由阿里巴巴攻城狮研发的JSON解析库。fastJSON是目前性能最好的解析库。
FastJson的使用与谷歌的GSON差不多。都是将解析的数据封装在一个bean对象当中解析出来。
还有一点与GSON解析有所不同的是:Fast JSON解析的bean对象一定的有默认的构造函数,否则会抛异常:com.alibaba.fastjson.JSONException: default constructor not found。而GSON解析则不一定需要默认的构造函数。
//JSON为阿里巴巴的JSON库 Book book = JSON.parseObject(value, Book.class);
就一行代码就解析出来了,是不是觉得比GSON还高级呢?
解析出来的数据也是跟上面的一样。
JSON数据的三种解析也就那么简单,那么怎么构建一个JSON 数据呢?
利用Android本身自带的org.json.JSONObject构建JSON 的数据:
构建json数据,首先得指明你构建的是JSON对象还是JSON数据;
jsonStringer.array();//构建JSON数组开始
jsonStringer.object();//开始构建JSON对象
在构建完JSON数组或者JSON对象都应该调用endObject()或者endArray()来结束构建。
JSONStringer jsonStringer = new JSONStringer(); jsonStringer.array(); jsonStringer.object().key("name").value("gaosi").key("id").value(12).endObject(); jsonStringer.object().key("name").value("usc").key("id").value(435).endObject(); jsonStringer.endArray();
使用FastJSON构建JSON数据
需要先将JSON数据封装到Bean对象当中
使用JSON.toJSON(object);//构建一个JSON对象
//返回JSON结构字符串
//默认是false即字符串没有格式化
//为true时候,JSON 字符串是格式化的字符串
JSON.toJSONString(object, true);
//封装Bean类数据 Book book = new Book(); Tag tag = new Tag(12,"tag1_name","tag1_title"); Images images = new Images("image_small","image_large","iamge_medium"); ArrayList<Tag> list = new ArrayList<>(); list.add(tag); book.setTitle("book_title"); book.setSummary("book_summary"); book.setImages(images); book.setpubdate("book_pubdate"); book.setTags(list); //构建一个JSON数据的对象 Object toJSON = JSON.toJSON(book); String toString = toJSON.toString(); //构建JSON数据字符串 //参数Boolean 为是否为格式化的JSON字符串 String toJSONString = JSON.toJSONString(book, true); Log.e("gaosi",toString); Log.e("gaosi",toJSONString);
当boolean 为false时候,字符串会是怎么样?
String toJSONString = JSON.toJSONString(book, false);
使用GSON解析库来封装数据
其实GSON的使用与FastJSON都大同小异的
Gson gson = new Gson(); String json = gson.toJson(book); Log.e("gaosi",json);
数据的构建结果:
总结:
JSON是一种轻量级的数据交互格式,它比XML数据交互跟简单方便灵活。XML在格式上更有对象的特点,但是在交互中没有JSON方便好用。
Android系统自带的JSON解析库的 API中,不管是解析JSON数据还是构建JSON数据,都是一层一层的解析或者封装;
而FastJSON和GSON则是将数据封装在Bean对象当中解析或者构建,感觉会比使用Android系统自带的JSON解析库API更简单易用
选择哪种JSON解析库还是XML交互,这个得根据业务需求与个人爱好来决定,哪种更适合业务需求选择哪种
相关推荐
本文将深入探讨如何在Android平台上进行JSON解析,无需依赖任何第三方库,只使用Android SDK自带的类。我们将涵盖两种解析方式:本地JSON解析和在线JSON解析。 ### 1. JSON基础知识 JSON是一种文本格式,基于...
Retrofit是另一种流行的Android网络库,它允许更优雅地处理网络请求和响应,包括JSON解析。添加依赖: ```groovy implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation '...
使用解析JSON文件获取天气预报信息,并将不同城市的天气信息显示在主界面中,应用程序运行时界面如图1所示。单击其他城市按钮时,将显示相应城市对应的天气信息,如图2所示4.在模块对应的包名下创建JSON数据对应的...
在“Android Json 解析demo”项目中,可能包含了创建JSON解析器的代码示例,以及如何在Android Studio中运行和测试这些功能的步骤。你可以通过查看项目中的JsonDemo文件来学习具体的实现细节,包括如何读取网络上的...
在Android开发中,有时我们需要从服务器获取JSON数据并解析它以展示在应用中。这个"android 动态解析获取json数据的键值对"的项目就是针对这种情况的一个实例,主要展示了如何在Eclipse环境下,不预先创建JSON键值...
笔者近期做到对天气预报JSON数据解析,在此小记。 天气预报接口:http://wthrcdn.etouch.cn/weather_mini?citykey=101200101 JSON数据如下: { desc: OK, status: 1000, data: { wendu: 14, ganmao: 天气...
在Android开发中,JSON(JavaScript Object Notation)是一种轻量级的...综上,Android中将JSON解析并放入ListView涉及到网络请求、JSON解析、数据绑定等多个环节,通过合理的设计和优化,可以构建出高效、流畅的应用。
通过“安卓Android源码——解析json_dome.zip”的学习,开发者可以更好地掌握JSON解析技术,从而在Android应用中高效地处理服务器返回的数据。结合实践,不断熟悉和熟练这些方法,将有助于提升你的Android开发技能。
我们通常在Android上采用Gson来解析Json数据,很方便的就可以把数据转换成List或者map。当碰到日期时间的时候,你可能会遇到坑,需要格式化一下日期时间格式。 本文介绍org.json这种不需要导入任何包的解析方式,...
理解并能熟练运用JSON解析对于一个Android开发者来说至关重要。本篇文章将深入探讨Android平台上的JSON解析源码,帮助你更好地理解和优化你的应用性能。 一、JSON基本结构 JSON主要包含两种数据结构:对象和数组。...
3. **org.json库**:Android自带的JSON解析库,支持将JSON字符串转换为`JSONObject`和`JSONArray`,并提供相关的方法进行解析。 4. **Fastjson库**:阿里巴巴的高性能JSON库,适用于大量数据处理。 ### Android...
这篇博客文章将探讨如何在Android应用中解析JSON数据,我们将不涉及具体的代码示例,而是深入理解JSON解析的基础和常用方法。 1. JSON基本结构: JSON主要由对象(Objects)和数组(Arrays)构成。对象是一组键值...
总结起来,这个demo涵盖了Android应用开发中的基本网络通信和数据解析,是学习Android网络编程和JSON解析的一个实践案例。通过分析和理解这个示例,开发者可以深化对Android网络操作和JSON处理的理解,为今后的项目...
本主题聚焦于“Android Studio解析JSON对象”,这是一个非常关键且实用的技能,因为JSON作为一种轻量级的数据交换格式,广泛应用于网络通信和数据存储。JSON对象可以方便地表示各种复杂的数据结构,包括数组、键值...
在Android开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人和机器都能容易地读取和编写数据。...通过不断实践,你可以更加灵活地运用这些工具,解决各种复杂的JSON解析问题。
在Android开发中,JSON解析是必不可少的技能,它可以帮助应用程序处理服务器返回的数据或存储本地数据。 在"json解析_简单的练习"这个主题中,我们主要关注如何在Android环境下对JSON进行解析。文件列表中包含了`...
二、Android中的JSON解析 在Android中,我们通常使用`org.json`库或`com.google.gson`库来解析JSON数据。 1. `org.json`库:这是Android SDK自带的一个轻量级库,主要用于解析简单的JSON数据。 - JSONObject:...
android封装的json解析,可以直接解析对象或者list 如果有不明白的地方,可以联系我: QQ:840950105 Email:vipa1888@163.com Author:spring sky
对于Android开发者来说,理解和熟练掌握JSON解析至关重要。本篇文章将详细介绍如何创建一个实用的JSON数据解析封装类,以便快速有效地处理各种形式的JSON数据。 首先,我们需要引入一个JSON库,Android SDK本身包含...
总结,Android平台下的JSON解析主要依靠org.json库中的JSONObject和JSONArray类。理解这些基本操作,开发者能够方便地处理从服务器获取的JSON数据,将其转化为应用程序可操作的对象,从而实现数据的展示和交互。在...