JSON格式数据解析及GSON框架的使用详解

本文介绍了JSON格式的优势与不足,并对比了使用JSONObject与GSON两种方式解析JSON数据的方法。详细讲解了如何通过这两种方式解析JSON对象及JSON数组,同时展示了如何将List对象转化为JSON格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSON

优缺点
  • 优点:比起XML,JSON优势在于它的体积更小,在网络传输中可以更省流量。
  • 缺点:语义性较差,不如XML直观。
JSONObject

JSON对象格式:

{"id":1,"name":"Java"}

一个{}里面的内容表示一个JSON对象。
一个”key”:value,表示一个键值。
String型的value要用”“修饰。
也可以:

{"book":{"id":1,"name":"Java"}}

表示key对于的value是JSON对象。

JSONArray

JSON数组格式:

[
   {"id":1,"name":"Java"},
   {"id":2,"name":"xml"},
   {"id":3,"name":"Android"}
]

一个[]里面的内容表示一个JSON数组,包含多个JSONObject。
也可以:

{"book":[
   {"id":1,"name":"Java"},
   {"id":2,"name":"xml"},
   {"id":3,"name":"Android"}
]}

表示key对于的value是JSON数组。

使用JSONObject解析

解析JSONObject
   private void parseJSonObject(String json) {
        try {
            JSONObject object = new JSONObject(json);//转换为JSON对象
            int id = object.getInt("id");
            String name = object.getString("name");
            System.out.println(id + ":" + name);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
解析JSONArray
  private void parseJson(String json) {
        try {
            JSONArray array = new JSONArray(json);//转换为JSON数组
            for (int i = 0; i < array.length(); i++) {
                JSONObject object = array.getJSONObject(i);//获取JSON对象
                int id = object.getInt("id");//根据类型获取对应的值
                String name = object.getString("name");
                System.out.println(id + ":" + name);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

使用GSON解析

添加依赖
dependencies {
    ...
    compile 'com.google.code.gson:gson:2.7'
    ...
}
定义对应的数据类

定义一个数据类,要求与JSON数据中的值一一对应。如下:

public class Book {
    int id;
    String name;
    public Book(int id, String name) {
        this.id = id;
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
解析JSONObject
    private void parseGsonObject(String json1) {
        Gson gson = new Gson();//创建Gson对象
        Book book = gson.fromJson(json1, Book.class);//转为数据类型
        System.out.println(book.getId() + ":" + book.getName());
    }
解析JSONArray

如果是JSON数组,会比较麻烦没需要借助TypeToken将期望的数据类型传入到fromJson()中。

    private void parseGsonArray(String json2) {
        Gson gson = new Gson();
        List<Book> booklist = gson.fromJson(json2, new TypeToken<List<Book>>() {
        }.getType());
        for (Book book : booklist) {
            System.out.println(book.getId() + ":" + book.getName());
        }
    }
List转为JSON格式数据

List数据也是一个key对应一个value,因此也可以使用Gson对象的toJson()方法将List数据转为String类型,进而转换为JSON对象。

Gson gson = new Gson();
String json = gson.toJson(booklist);//上面方法得到的list
System.out.println(json);

结语

除官方的JSONObject,与谷歌的开源GSON,一些第三方Jackson,FastJSON(阿里开源的)等也很不错。
其中如果JSON格式的数据形式比较统一,则使用GSON比较方便;如果数据形式不统一,则使用JSONObject比较好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值