推荐Json解析库Moshi——不只是Gson

说到Json解析库,网上可以说一找一大堆,例如经典的JSONObject、Gson、FastJson等等。Json解析库确实是大部分程序员都会使用的一类库,虽然自己完全可以一步步去解析,但是其实真的没必要自己去写,不会偷懒的程序员不是好程序员。

今天给大家分享一个新库,Moshi。说到moshi,可能很多童鞋没听过,但是说到square团队,大家基本上都是听说过的,moshi就是该团队出品的一个Json解析库。

地址是:https://github.com/square/moshi

这里写下最基本简单的使用:

首先是compile:

compile 'com.squareup.moshi:moshi:1.2.0'

国际惯例,根据Json字符串的格式建立实体(您可以纯手写或者使用GsonFormat等等):

public final class IdCard {
    private String resultcode;
    private String reason;
    private ResultBean result;
    public String getResultcode() {
        return resultcode;
    }
    public void setResultcode(String resultcode) {
        this.resultcode = resultcode;
    }
    public String getReason() {
        return reason;
    }
    public void setReason(String reason) {
        this.reason = reason;
    }
    public ResultBean getResult() {
        return result;
    }
    public void setResult(ResultBean result) {
        this.result = result;
    }
    public static class ResultBean {
        private String area;
        private String sex;
        private String birthday;
        public String getArea() {
            return area;
        }
        public void setArea(String area) {
            this.area = area;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public String getBirthday() {
            return birthday;
        }
        public void setBirthday(String birthday) {
            this.birthday = birthday;
        }
    }
}

接下来是使用moshi进行Json解析,这里再次偷懒,直接把Json字符串扔了进来:

String json = "{\"resultcode\":\"200\",\"reason\":\"成功\",\"result\":{\"area\":\" 上海市\",\"sex\":\"男\",\"birthday\":\"2016年08月07日\"}}";

接着实例Moshi对象:

Moshi moshi = new Moshi.Builder().build();

然后使用Moshi提供的Moshi.adapter()方法来绑定实体:

JsonAdapter<IdCard> jsonAdapter = moshi.adapter(IdCard.class);

最后就是解析Json了,使用JsonAdapter.fromJson()来传入Json字符串就可以解析成功了:

try {
    IdCard idCard = jsonAdapter.fromJson(json);
    Toast.makeText(context, idCard.getResult().getArea(), Toast.LENGTH_SHORT).show();
} catch (IOException e) {
    e.printStackTrace();
}

这里只解析了area键,点击后可以看到数据已经解析成功,是不是超级简单呢? 解析网络数据时千万别忘记添加访问网络的权限哦。

希望对各位有所帮助。

效果图:

原文发布于微信公众号 - Android机动车(JsAndroidClub)

原文发表时间:2018-02-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承

当今的IT领域,SOA已经成为了一个非常时髦的词,对SOA风靡的程度已经让很多人对SOA,对面向服务产生误解。其中很大一部分人甚至认为面向服务将是面向对象的终结...

20350
来自专栏木宛城主

深入浅出三层架构

这几天看了不少三层架构的资料,整理整理 ——故写篇博文谈谈自己的看法。 三层架构概念: 三层架构(3-tier application) 通常意义上的三层架构就...

26650
来自专栏tkokof 的技术,小趣及杂念

Sweet Snippet 系列之 有序列表

很朴素的一种想法,为了维持 List 有序,我们可以在 Add 操作之后进行 Sort 操作(Remove 操作后不需要重新 Sort):

5710
来自专栏跟着阿笨一起玩NET

AutoResetEvent.WaitAll 等到人生三大事,然后大笑开心。

例子描述:人生都有追求幸福理想,下面就用三条线程得到房子,车子,妻子,等待全部得到后,显示人生圆满。

29620
来自专栏海天一树

小朋友学C语言(29):switch case语句

switch case语句与if elseif语句类似,都是从多个选择条件里选取一个来执行。 (一)先来看一个if elseif程序 #include <std...

34490
来自专栏SDNLAB

ONOS集群选举分析

首先简单介绍下自己,之前是做 floodlight 控制器开发的,鉴于 ODL 和 onos 的如火如荼的发展,如果不对了解点就感觉自己 OUT 了,因此忙里偷...

37860
来自专栏XAI

百度人脸识别API Java调用

工具类下载http://pan.baidu.com/s/1jIuo0N8 小Demo查询。 1.官网文档必须看 http://ai.baidu.com/docs...

2.4K110
来自专栏马洪彪

C#解析PDF

C#解析PDF的方式有很多,比较好用的有ITestSharp和PdfBox。 PDF内容页如果是图片类型,例如扫描件,则需要进行OCR(光学字符识别)。 文本内...

60890
来自专栏大内老A

[ASP.NET MVC]为HtmlHelper添加一个RadioButtonList扩展方法

在前面一篇文章中,我们通过对HtmlHelper的扩展简化了对DropDownList(Single-Line-Select)和ListBox(Multiple...

228100
来自专栏me的随笔

模板方法模式实践

在实际编程中,会经常遇到多个类中的某些方法实现逻辑类似的情况,这时我们可以将这些类中的相同部分抽象到父类中,对于有差异的地方,子类根据自身的实际需求来各自实现。

11320

扫码关注云+社区

领取腾讯云代金券