[Android]【安卓】Json数据的快速拼装和解析
16lz
2021-01-26
[Android]【安卓】Json数据的快速拼装和解析
本篇博客已收录到我的安卓开发小结中——点击【安卓开发小结】
参考资料:介绍 Json
一、什么是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建构于两种结构:
a、“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
b、值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
1、结构a——对象
- 对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
2、结构b——数组
- 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
3、详解
- 值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、null、对象(object)或者数组(array)。这些结构可以嵌套。
- 字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。 字符串(string)与C或者Java的字符串非常相似。
quotation mark:引号
reverse solidus:反斜线
solidus:斜线
backspace:退格
formfeed:换页
newline:换行
carriage return:回车
horizontal tab:制表符
4 hexadecimal digits:4个16进制数
以上字符加了一个反斜杠后,表示冒号后的意思。 - 数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。
二、如何快速拼装Json数据
假设我们的目标数据为:
{ "limit": 3, "offset": 0, "query": { "_id": { "$in": ["轮播位id1", "轮播位id2", "轮播位id3"] } }}
- 大的{}是一个Json对象,所以我们创建一个json对象,limit和offset是属于json对象的最简单的键值对,所以直接用json.put()方法添加就好,query这个key对应着{},说明后面是一个对象,所以我们创建一个Json子对象subJson1,id这个key对应的也是{},也是一个对象,所以再创建一个子对象subJson2,$in对应的是[],是一个json数组,所以我们创建一个jsonArray 对象,然后将数据添加到jsonArray 数组里,接着将jsonArray 添加到subJson2里,接着将subJson2添加到subJson1里,最后将subJson1添加到json里。
JSONObject json = new JSONObject(); JSONObject subJson1 = new JSONObject(); JSONObject subJson2 = new JSONObject(); JSONArray jsonArray = new JSONArray(); json.put("limit",carrouselIdList.size()); json.put("offset",0); for(int i=0;i jsonArray.put(i,carrouselIdList.get(i)); } subJson2.put("$in",jsonArray); subJson1.put("_id",subJson2); json.put("query",subJson1); String data = json.toString();
三、如何快速解析Json数据
1、添加gson库依赖(需要的可以留言)
build.gradle
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs')}
2、写一个Json类
public abstract class Json { private static Json json; Json() { } public static Json get() { if (json == null) { json = new GsonImplHelp(); } return json; } public abstract String toJson(Object src); public abstract T toObject(String json, Class claxx); public abstract T toObject(byte[] bytes, Class claxx); public abstract List toList(String json, Class claxx);}
3、写一个GsonImplHelp类
public class GsonImplHelp extends Json { private Gson gson = new Gson(); @Override public String toJson(Object src) { return gson.toJson(src); } @Override public T toObject(String json, Class claxx) { return gson.fromJson(json, claxx); } @Override public T toObject(byte[] bytes, Class claxx) { return gson.fromJson(new String(bytes), claxx); } @Override public List toList(String json, Class claxx) { Type type = new TypeToken>() { }.getType(); List list = gson.fromJson(json, type); return list; }}
4、使用插件快速生成解析实体Bean类
- 不知道的朋友查看我这篇博客:[Android]【安卓】使用插件快速生成JSon解析类
5、在请求回调中这么处理,就可以得到想要的数据
DataParseBean bean = GsonImplHelp.get().toObject(result, DataParseBean.class);
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- 一句话锁定MySQL数据占用元凶
- Android:实现带图片和CheckBox的ListView
- android基础(1)
- Android之SQLite——不同数据库间复制表
- Parcelable的使用
- BlobCache算法详解
- Android(安卓)ORMLite数据库框架使用入门
- Android序列化 Serializable使用和Parcelable 插件化使用 以及两