Android中json的解析

来源:互联网 发布:java泛型接口 编辑:程序博客网 时间:2024/04/28 15:48
Json vs XML


1.数据可读性基本相同
2.解析手段都很多
3.json数据体积更小
4.json与javascript关系紧密
5.json对数据描述更差


中括号代表一个json数组,比如:
[{"name":"zhangsan","age":20},{"name":"lisi","age":21}]

android sdk本身有对json解析的相关类库JsonReader,但是JsonReader只支持3.0及以上。所以只能使用Gson。


1.为了解析json数据,首先要有一个JsonReader对象。初始化JsonReader需要一个StringReader对象做参数。如:


JsonReader reader = new JsonReader(new StringReader(jsonData));


2.Gson可以将json直接解析成对象。这样其实更加方便。如果我没记错的话,专业名词叫“反序列化”。


第一种是简单的解析:

JsonReader reader = new JsonReader(new StringReader(jsonData));reader.beginArray();while(reader.hasNext()){reader.beginObject();while(reader.hasNext()){String tagName= reader.nextName();if(tagName.equals("name")){System.out.println("name->"+reader.nextString());}else if (tagName.equals("age")) {System.out.println("age->"+reader.nextInt());}}reader.endObject();}reader.endArray();

第二种方法更加方便,即反序列化:

Gson gson = new Gson();User user = gson.fromJson(jsonData, User.class);System.out.println("name->"+user.getName());System.out.println("age->"+user.getAge());

这样只需提前写好User类(当中对应含有name、age等字段),就可以自动获得相应的对象,实现了数据的解析。


解析json数组时,可以这样:

Type listType = new TypeToken<LinkedList<User>>(){}.getType();Gson gson = new Gson();LinkedList<User> users = gson.fromJson(jsonData, listType);for (User user : users) {System.out.println(user.getName());System.out.println(user.getAge());}



原创粉丝点击