[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);

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. Android:实现带图片和CheckBox的ListView
  4. android基础(1)
  5. Android之SQLite——不同数据库间复制表
  6. Parcelable的使用
  7. BlobCache算法详解
  8. Android(安卓)ORMLite数据库框架使用入门
  9. Android序列化 Serializable使用和Parcelable 插件化使用 以及两

随机推荐

  1. java 非静态内部类为什么持有外部类的引
  2. toolbar自定义右边的菜单注意
  3. android图形图像
  4. AndroidStudio离线使用gradle
  5. 2011.12.05(5)——— android JNI学习之四
  6. Ubuntu下android刷机教程
  7. 安卓WebView与JavaScript交互
  8. Android(安卓)开发艺术探索(第一章-Activi
  9. Android文件下载功能实现代码
  10. android实现携程购票起始点位置交换