美文网首页
Gson解析之使用TypeAdapter避免json字符串与ja

Gson解析之使用TypeAdapter避免json字符串与ja

作者: 岁月神偷_4676 | 来源:发表于2019-10-10 10:12 被阅读0次

    Java 类Group字段如下

    public class Group {
        private String _id;
        private String name;
        private String creator;
        private User[] members;//private String[] members
    
        //setter and getter 
        // ...
    }
    
    

    User类字段如下:

    public class User {
        private String userName;
        private String displayName;
        private String status = "";
        private String telephone;
            //getter and setter
            //...
    }
    

    其中members字段原本是String[]类型 , 后来改为User[],但是后台数据库已经存储了String[]类型的数据,所以如果简单的通过gson.fromJson()解析,当遇到String[]类型的members时一定会爆出异常崩溃。那这个问题有没有解决的办法呢?当然有。
    那就是使用TypeAdapter, 将原来String 类型的 members字段成为 User类的一个成员变量的值。代码如下

    final Gson gson=new GsonBuilder().registerTypeAdapter(User.class, new TypeAdapter<User>() {
                                @Override
                                public void write(JsonWriter jsonWriter, User user) throws IOException {
    
                                    if(user != null) {
                                        jsonWriter.value(user.toString());
                                    }
    
                                }
    
                                @Override
                                public User read(JsonReader jsonReader) throws IOException {
                                    if(jsonReader.hasNext()) {
                                        if(jsonReader.peek() == JsonToken.STRING) {
                                            User user = new User();
                                            user.setUserName(jsonReader.nextString());
                                            return user;
                                        } else if(jsonReader.peek() == JsonToken.BEGIN_OBJECT) {
                                            User user = new User();
                                            jsonReader.beginObject();
                                            while(jsonReader.hasNext()) {
                                                String name = jsonReader.nextName();
                                                switch (name) {
                                                    case "userName":
                                                        user.setUserName(jsonReader.nextString());
                                                        break;
                                                    case "displayName":
                                                        user.setDisplayName(jsonReader.nextString());
                                                        break;
                                                    case "telephone":
                                                        user.setTelephone(jsonReader.nextString());
                                                        break;
                                                        default:
                                                            jsonReader.skipValue();
                                                            break;
                                                }
                                            }
                                            jsonReader.endObject();
                                            return user;
                                        }
                                            return null;
                                    }
                                    return null;
    
                                }
                            }).create();
                            qgr = gson.fromJson(result, Res_QueryGroup.class);
    

    主要在于read方法,将原来String[]类型的members使之成为User类的一个字段的值,从而解决了问题。

    相关文章

      网友评论

          本文标题:Gson解析之使用TypeAdapter避免json字符串与ja

          本文链接:https://www.haomeiwen.com/subject/ptdopctx.html