解析json的库

JSON

json(JavaScript Object Notation)是一种轻量级的数据交换格式,用于数据转换传输,通用于php,java,c++,c#,Python等编程语言数据交换.

易于人阅读和编写,同时也易于机器解析和生成.

基本结构:对象和数组

 gson

它是谷歌提供的用来在java对象和json数组之间进行映射的java类库,可以将一个json字符串转成一个java对象,反之也可以。

  • 快速,高效,代码量少,简洁
  • 面向对象,数据传递和解析方便

gson使用

它的jar包网上可以下载到.

比如你的json数据是这样的:

{
   "rating":{
      "max":10,
      "numRaters":354,
      "average":"7.0",
      "min":0
   },
   "tags":[
      {
         "count":141,
         "name":"片山恭一",
         "title":"片山恭一"
      },
      {
         "count":67,
         "name":"日本",
         "title":"日本"
      },
      {
         "count":64,
         "name":"日本文学",
         "title":"日本文学"
      },
      {
         "count":7,
         "name":"外国文学",
         "title":"外国文学"
      }
   ],
   "image":"https://img3.doubanio.com\/mpic\/s1747553.jpg",
   "binding":"平装",
   "images":{
      "small":"https://img3.doubanio.com\/spic\/s1747553.jpg",
      "large":"https://img3.doubanio.com\/lpic\/s1747553.jpg",
      "medium":"https://img3.doubanio.com\/mpic\/s1747553.jpg"
   },
   "alt":"https:\/\/book.douban.com\/subject\/1220562\/",
   "id":"1220562",
   "publisher":"青岛出版社",
   "title":"满月之夜白鲸现",
   "url":"https:\/\/api.douban.com\/v2\/book\/1220562",
   "summary":"那一年,是听莫扎特、钓鲈鱼和家庭破裂的一年。说到家庭破裂,母亲怪自己当初没有找到好男人,父亲则认为当时是被狐狸精迷住了眼,失常的是母亲,但出问题的是父亲……。",
   "price":"15.00元"
}

你需要新建一个实体类去对应他(解析部分,你需要的),对应类如下:

public class Book {

    private String title;
    private String publisher;
    private String summary;
    //对应jsonArray
    private ArrayList<Tag> tags;
    //对应jsonObject
    private Rate rating;

    @SerializedName("binding")
    private String bind;

    public Book() {
    }

    public Book(String title, String publisher, String summary, ArrayList<Tag> tags, String numRaters) {
        this.title = title;
        this.publisher = publisher;
        this.summary = summary;
        this.tags = tags;

    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getPublisher() {
        return publisher;
    }

    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public ArrayList<Tag> getTags() {
        return tags;
    }

    public void setTags(ArrayList<Tag> tags) {
        this.tags = tags;
    }

    @Override
    public String toString() {
        return title + "  " + publisher + "  " + summary + "  " + tags.size() + "  " + bind + rating.numRaters;
    }

    //类名可以随便,但是对象名必须对应,或者看下面的注意
    public static class Rate{
        private String max;
        private String numRaters;
        private String average;
        private String min;
    }

    //我试了一下,这里不写static也是可以的,当然不写成内部类也行的
    public static class Tag {
    private String count;
    private String name;
    private String title;
    }

}

注意:

//当它返回的字段名和你的命名规则有冲突,可以采用这样序列化命名
@SerializedName("username")//json中命名
private String name;//你的实体类命名

然后解析的话,很简单.

String json = ".......";
Gson gson = new Gson();

//传入一般的类
//Book book = gson.fromJson(result,Book.class);

//传入泛型类必须这样用,很多重载..
Book book = gson.fromJson(json,new TypeToken<Book>(){}.getType());

//当然也可以反转,有好多重载
String json = gson.toJson(book);

fast-json

它是阿里巴巴推出的,是一个性能很好的java语言实现的json解析器和生成器,极快的性能.

  • 快速fast
  • 强大,无依赖
  • 支持注解,支持全类型序列化

fast-json使用

添加依赖:

compile ‘com.alibaba:fastjson:1.2.21’

实体类和gson差不多,解析时候的代码:

//我发现如果不写get和set函数,gson可以解析成功,而fast-json是null.
Book book = JSON.parseObject(json,Book.class);

两个库的简单使用总结

gson的实体类可以写的’松散’点,就是比如不带get和set函数也可以,而fast-json必须带,不然解析失败,但是都说fast-json速度快一些..

解析成数组的话我觉得都可以啊.

//gson方法
Type type = new TypeToken<ArrayList<Book>>(){}.getType();
Gson gson = new Gson();
//这里的json是那个jsonArray数组,你可以自己简单解析一下.
ArrayList<Book> list = gson.fromJson(json,type);

//fast-json方法
ArrayList<Book> list1 = (ArrayList<Book>) JSON.parseArray(json,Book.class);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值