Gson

作者: 云木杉 | 来源:发表于2019-02-19 14:06 被阅读0次

    范例

    Type userType = new TypeToken<Result<User>>(){}.getType();
    
     public static void main(String[] args) {
    
         Gson gson = new Gson();
         String jsonStr = "{'name':'mangliu','age':'20'}";
         User user = gson.fromJson(jsonStr, User.class);
    
         System.out.println(user.toString());
     } 
    

    在fromJson方法里

    
     public <T> T fromJson(String json, Type typeOfT) throws JsonSyntaxException {
      // classOft向上转型为Type
       Object object = fromJson(json, (Type) classOfT);
        ··· 
       if (json == null) {
          return null;
        }
        ···
        // json封装为流对象
       StringReader reader = new StringReader(json);
        ···
       JsonReader jsonReader = newJsonReader(reader );
        ···
        boolean oldLenient = reader.isLenient();
        reader.setLenient(true);
        
        boolean oldLenient = reader.isLenient();
        reader.setLenient(true);//不严格按照Json标准语法
        //先做一次语法检查,并获取第一个非空字符,通过这个非空字符来标记下一个解析格式。
        reader.peek();
        
        isEmpty = false;
        TypeToken<T> typeToken = (TypeToken<T>) TypeToken.get(typeOfT);
        TypeAdapter<T> typeAdapter = getAdapter(typeToken);
        T object = typeAdapter.read(reader);
        
        return target;
      }
    

    classOfT向上转型为Type,json封装进流对象StringReader中,再将reader包装为JsonReader对象,最后将classOft类型转换为TypeToken,再由TypeToken生成对应的TypeAdapter

    TypeAdapters

    • 这个类中定义了几乎所有的基础类型的TypeAdapter和Factory

    相关文章

      网友评论

          本文标题:Gson

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