Android中Json的解析和构建

2 篇文章 0 订阅
2 篇文章 0 订阅

Json作为一种轻量级的数据交换格式,在Android中的使用无需多说,除了用于网络数据传输,我们还偶尔在App代码中拿它做配置文件,相当于XML。

今天对Android中的几种Json工具作一个简单的用法上的记录。


老规矩,在节目开始之前,先来一个搞笑段子。

女神要买电脑,我疯狂地帮她查参数,比价格,把优势劣势分析了一遍。最后,她一句:就买那个粉色的吧。

男闺蜜要相亲,我疯狂地帮他算星座,比血型,把性格婚姻融洽度分析了一遍,最后,他一句:就选那个胸大的吧。


言归正传,我们假定有一个Java Bean:User,它有两个属性:name、age

public class User {

    private String name = null;

    private int age = 0;

    public User(){}

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
我们要把Java对象转换成Json String,再把Json String转换成Java对象。

1、Google的GSON

对象 to Json

Gson gson = new Gson();
User user = new User("aa", 20);
String jsonString = gson.toJson(user);
Log.e(TAG, jsonString);


Json to 对象

String jsonString = "{\"age\":20,\"name\":\"aa\"}";
User user = gson.fromJson(jsonString, User.class);
Log.e(TAG, user.getName() + ":" + user.getAge());


对象数组 to Json
List<User> users = new ArrayList();
users.add(new User("aa", 10));
users.add(new User("bb", 20));
String jsonString = gson.toJson(users);
Log.e(TAG, jsonString);


Json to 对象数组

String jsonString = "[{\"age\":10,\"name\":\"aa\"},{\"age\":20,\"name\":\"bb\"}]";
TypeToken<List<User>> token = new TypeToken<List<User>>(){};
Type type = token.getType();
List<User> users = gson.fromJson(jsonString, type);
for(int i = 0; i < users.size(); i++) {
    Log.e(TAG, users.get(i).getName() + ":" + users.get(i).getAge());
}


2、Alibaba的fastJson

对象 to Json

User user = new User("aa", 20);
String jsonString = JSON.toJSONString(user);
Log.e(TAG, jsonString);

Json to 对象

String jsonString = "{\"age\":20,\"name\":\"aa\"}";
User user = JSON.parseObject(jsonString, User.class);
Log.e(TAG, user.getName() + ":" + user.getAge() + ":" + user.getFather());


3、org.JSON

对象 to Json

User user = new User("aa", 20);
JSONObject jsonObject = new JSONObject();
try {
    jsonObject.put("name", user.getName());
    jsonObject.put("age", user.getAge());
    String jsonString = jsonObject.toString();
    Log.e(TAG, jsonString);
} catch (JSONException e) {
    e.printStackTrace();
}


Json to 对象

String jsonString = "{\"age\":20,\"name\":\"aa\"}";
try {
    JSONObject jsonObject = new JSONObject(jsonString);
    String name = jsonObject.getString("name");
    int age = jsonObject.getInt("age");
    Log.e(TAG, "name=" + name + ", age=" + age);
    User user = new User(name, age);
} catch (JSONException e) {
     e.printStackTrace();
}


Json的使用在实际项目中基本上都会再做一个简单的封装,这个就是列举了一下主要的Api。


至于这三个的性能,网上有人做过实验:

在数据量一般的情况下,GSON稍微好点,在数据量特别大(千万级)的时候,FastJson展现出很好的性能,可能这就是为什么Alibaba给它取名叫fastJson。


本期节目就到这里,感谢大家的收看,下期再见~








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值