Android JSON 解析库的使用 - Gson 和 fast-json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。
这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。

GSON是由谷歌官方推出的 JSON 与 Java 对象转化的 Java类库

fast-json 阿里推出的用于Android平台的库,性能很好的Java实现的JSON 解析和生成器,据说功能强大且速度超越现有的所有库

GSON用法:

1. 解析JSONObject,JSONArray

2. 将JSON实体转化为JSON数据

工程导入三个包 fastjson, gson,volley


//从豆瓣网获取数据, 在 http://www.bejson.com/ 解析查看数据
private void getData() {
    StringRequest request = new StringRequest(url, new Listener<String>() {
        @Override
        public void onResponse(String arg0) {
            Log.i(TAG, arg0); //获取完成后,在 http://www.bejson.com/ 解析查看数据
            dealData(arg0);
        }
    }, new ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError arg0) {
            // TODO Auto-generated method stub
        }
    });
    new Volley().newRequestQueue(getApplicationContext()).add(request);
}

//处理数据
private void dealData(String result){
    Gson gson = new Gson();
    Book book = gson.fromJson(result, Book.class); // data 转实体
    Log.i(TAG, book.getTitle() + "; "
            + book.getPublisher() + ";"
            + book.getTags().size() + ";" );
}
private String TAG = "CARLOZ";
private String url = "https://api.douban.com/v2/book/1220562";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_jsonparse);

    getData();
}

Book属于实体类,详情,请查看代码GitHub

输出结果

08-10 21:19:22.321: I/CARLOZ(24911): {"rating":{"max":10,"numRaters":340,"average":"7.0","min":0},"subtitle":"","author":["[日] 片山恭一"],"pubdate":"2005-1","tags":[{"count":133,"name":"片山恭一","title":"片山恭一"},{"count":62,"name":"日本","title":"日本"},{"count":60,"name":"日本文学","title":"日本文学"},{"count":38,"name":"小说","title":"小说"},{"count":32,"name":"满月之夜白鲸现","title":"满月之夜白鲸现"},{"count":15,"name":"爱情","title":"爱情"},{"count":8,"name":"純愛","title":"純愛"},{"count":8,"name":"外国文学","title":"外国文学"}],"origin_title":"","image":"http:\/\/img3.douban.com\/mpic\/s1747553.jpg","binding":"平装","translator":["豫人"],"catalog":"\n      ","pages":"180","images":{"small":"http:\/\/img3.douban.com\/spic\/s1747553.jpg","large":"http:\/\/img3.douban.com\/lpic\/s1747553.jpg","medium":"http:\/\/img3.douban.com\/mpic\/s1747553.jpg"},"alt":"http:\/\/book.douban.com\/subject\/1220562\/","id":"1220562","publisher":"青岛出版社","isbn10":"7543632608","isbn13":"9787543632608","title":"满月之夜白鲸现","url":"http:\/\/api.douban.com\/v2\/book\/1220562","alt_title":"","author_intro":"","summary":"那一年,是听莫扎特、钓鲈鱼和家庭破裂的一年。说到家庭破裂,母亲怪自己当初没有找到好男人,父亲则认为当时是被狐狸精迷住了眼,失常的是母亲,但出问题的是父亲……。","price":"15.00元"}
08-10 21:19:22.371: I/CARLOZ(24911): 满月之夜白鲸现; 青岛出版社;8;

Fast-json

public class FastJsonParseActivity extends Activity {

    private String TAG = "CARLOZ";
    private String url = "https://api.douban.com/v2/book/1220562";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fast_json_parse);

        getData();
    }

    private void getData() {
        StringRequest request = new StringRequest(url, new Listener<String>() {
            @Override
            public void onResponse(String arg0) {
                Log.i(TAG, arg0);
                dealData(arg0);
            }
        }, new ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError arg0) {
                // TODO Auto-generated method stub
            }
        });
        new Volley().newRequestQueue(getApplicationContext()).add(request);
    }
    // JSON data to java object
    private void dealData(String result) {
        Book book = JSON.parseObject(result, Book.class);
        Log.i(TAG, book.getTitle() + "; "
                + book.getPublisher() + ";"
                + book.getTags().size() + ";" );
    }
}

运行结果:

08-10 21:43:11.991: I/CARLOZ(28779): {"rating":{"max":10,"numRaters":340,"average":"7.0","min":0},"subtitle":"","author":["[日] 片山恭一"],"pubdate":"2005-1","tags":[{"count":133,"name":"片山恭一","title":"片山恭一"},{"count":62,"name":"日本","title":"日本"},{"count":60,"name":"日本文学","title":"日本文学"},{"count":38,"name":"小说","title":"小说"},{"count":32,"name":"满月之夜白鲸现","title":"满月之夜白鲸现"},{"count":15,"name":"爱情","title":"爱情"},{"count":8,"name":"純愛","title":"純愛"},{"count":8,"name":"外国文学","title":"外国文学"}],"origin_title":"","image":"http:\/\/img3.douban.com\/mpic\/s1747553.jpg","binding":"平装","translator":["豫人"],"catalog":"\n      ","pages":"180","images":{"small":"http:\/\/img3.douban.com\/spic\/s1747553.jpg","large":"http:\/\/img3.douban.com\/lpic\/s1747553.jpg","medium":"http:\/\/img3.douban.com\/mpic\/s1747553.jpg"},"alt":"http:\/\/book.douban.com\/subject\/1220562\/","id":"1220562","publisher":"青岛出版社","isbn10":"7543632608","isbn13":"9787543632608","title":"满月之夜白鲸现","url":"http:\/\/api.douban.com\/v2\/book\/1220562","alt_title":"","author_intro":"","summary":"那一年,是听莫扎特、钓鲈鱼和家庭破裂的一年。说到家庭破裂,母亲怪自己当初没有找到好男人,父亲则认为当时是被狐狸精迷住了眼,失常的是母亲,但出问题的是父亲……。","price":"15.00元"}
08-10 21:43:12.101: I/CARLOZ(28779): 满月之夜白鲸现; 青岛出版社;8;
// object to JSON dataprivate void dealData(String result) {
    List<Book> books = JSON.parseObject(result, new TypeReference<List<Book>>(){});
    Book book1 = new Book();
    book1.setTitle("Hello CarloZ");
    Book book2 = new Book();
    book2.setTitle("Hello CarloZ");
    Book book3 = new Book();
    book3.setTitle("Hello CarloZ");

    JSON.toJSON(book1); //book1 to JSON data
    JSON.toJSON(books);
}
时间: 2024-10-15 04:45:23

Android JSON 解析库的使用 - Gson 和 fast-json的相关文章

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的好用,今天我们为了博客的保质保量,也就不分开写,我们直接拿比较火的Gson和Fast-json来使用,末尾在进行一些分析 Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 一.各有千秋 两大解析库的东家都是巨头,一个来自于Google官方,一个来自阿里巴巴,我们这

fastjson是阿里巴巴的开源JSON解析库

fastjson的API十分简洁. String text = JSON.toJSONString(obj); //序列化 VO vo = JSON.parseObject("{...}", VO.class); //反序列化 https://github.com/alibaba/fastjson/wiki/Quick-Start-CN fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串

.Net Core下一次针对dpz2.Json和Newtonsoft.Json解析库的简单测试

关于dpz2.Json dpz2.Json是大胖子软件的自研Json解析库. 应用于更加简单的使用场景 在dpz2.Json诞生之前,我们一直使用的是Newtonsoft.Json解析库,Newtonsoft.Json最方便的地方是采用了类似JavaBean的绑定方式进行操作,但是实际操作时,我们可能更多时候只想要个解析器,好让我们能快速的辨别数据,这个时候,单纯的JavaBean方式又变得比较肘制,读取数据使用C#的动态类型确实可以比较方便的进行操作. 专注于直接操作 另外一个促使我们自研一个

75、JSON 解析库---FastJson, Gson

JSON 的简介: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.用于数据转换传输, 通用于PHP,Java,C++,C#,Python等编程语言数据交换传输. 易于人阅读和编写,同时也易于机器解析和生成. 基本结构:对象.数组. Gson 的简介和特点: Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. 快速.高效 代码量少

android json解析详细介绍之gson

废话不多说,什么json是轻量级数据交换标准:自己百度去深入了解:这里有三种json解析工具.本人只用过其中两种:    1.Google Json利器之Gson   评价:简单,方便. 2.阿里巴巴 Json利器之FastJson 评价:大数据的性能还是蛮快的. 3.IBM Json利器之Json4J   少人用. 首先导入volley.jar和gson.jar的包: 在主配置文件里面加上internet权限‘ 然后就是代码: mainActivity.java public class Ma

几种Java的JSON解析库速度对比

java中哪个JSON库的解析速度是最快的? JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考 了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上它们的确是不太一样的.因此,我们运行了一个基准测试来对常用的几个JSON库进行了测 试,看看在解析不同大小的文件时哪个库的速度是最快的.下面我会把结果分享给大家. JSON通常用于传输及解析大文件.这对运行在Hadoop或者是Spark集群上的数据处理程

几种java JSON解析库的评测单元测试及源码

迷信了很长时间的阿里,但今天突然做了一些json库的测试,结果大跌眼镜,评测 结果是,org.json库与org.simple.json库相差不多,在一个数量级,但是阿里fastjson. net.sf.json库和Gson速度最慢.或许已经有人想喷了,但我就是呈现一个测试结果, 欢迎来指导我理解的不足,或许阿里还有很多特殊的泛型的处理和类型转换我没有用 到,本帖的所要阐明的是处理字符串解析并取得对象的一些属性没有涉及泛型时的速 度评测. 评测结果如图: 源码如下: import junit.f

json解析库的使用

前言: 使用官方json.cpp解析库解析json文件 #include <json\json.h> #pragma comment(lib, "lib_json.lib") /************************/ /*json写操作*/ /************************/ void json_write_test() { Json::Value json_temp; json_temp["name"] = Json::V

Android开源库--Gson谷歌官方json解析库

官方文档地址:http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html 官方网站:http://code.google.com/p/google-gson/ json官方网站:http://www.json.org/json-zh.html 目前主流数据传输都用的是json,解析json并且转换成相应的类型就成了必经之路. 在没有使用gson之前,原生Andoird自带有类解析json,但是实在不方便使用.