开源项目

知识点

相关文章

更多

最近更新

更多

Google Gson库的主要操作类Gson详解

2019-04-27 12:32|来源: 网路

Gson是Google Gson库的主要操作类。 它提供了将Java对象转换为匹配的JSON结构的功能,反之亦然。 Gson首先使用GsonBuilder构建,然后使用toJson(Object)fromJson(String,Class)方法读取/写入JSON构造。

类声明

以下是com.google.gson.Gson类的声明 -

public final class Gson 
   extends Object

构造函数

编号 构造函数 说明
1 Gson() 用默认配置构造一个Gson对象。

类方法

编号 方法 描述
1 <T> T fromJson(JsonElement json, Class<T> classOfT) 此方法将从指定分析树读取的Json反序列化为指定类型的对象。
2 <T> T fromJson(JsonElement json, Type typeOfT) 此方法将从指定分析树读取的Json反序列化为指定类型的对象。
3 <T> T fromJson(JsonReader reader, Type typeOfT) reader中读取下一个JSON值并将其转换为typeOfT类型的对象。
4 <T> T fromJson(Reader json, Class<T> classOfT) 此方法将从指定Reader读取的Json反序列化为指定类的对象。
5 <T> T fromJson(Reader json, Type typeOfT) 此方法将从指定reader读取的Json反序列化为指定类型的对象。
6 <T> T fromJson(String json, Class<T> classOfT) 此方法将指定的Json反序列化为指定类的对象。
7 <T> T fromJson(String json, Type typeOfT) 此方法将指定的Json反序列化为指定类型的对象。
8 <T> TypeAdapter<T> getAdapter(Class<T> type) 返回type的类型适配器。
9 <T> TypeAdapter<T> getAdapter(TypeToken<T> type) 返回type的类型适配器。
10 <T> TypeAdapter<T> getDelegateAdapter(TypeAdapterFactory skipPast, TypeToken<T> type) 此方法用于获取指定类型的备用类型适配器。
11 String toJson(JsonElement jsonElement) JsonElements树转换为其等效的JSON表示形式。
12 void toJson(JsonElement jsonElement, Appendable writer) JsonElements树写出等价的JSON。
13 void toJson(JsonElement jsonElement, JsonWriter writer) jsonElement的JSON写入writer
14 String toJson(Object src) 此方法将指定的对象序列化为其等效的Json表示形式。
15 void toJson(Object src, Appendable writer) 此方法将指定的对象序列化为其等效的Json表示形式。
16 String toJson(Object src, Type typeOfSrc) 此方法将指定对象(包括泛型类型的对象)序列化为其等效的Json表示形式。
17 void toJson(Object src, Type typeOfSrc, Appendable writer) 此方法将指定对象(包括泛型类型的对象)序列化为其等效的Json表示形式。
18 void toJson(Object src, Type typeOfSrc, JsonWriter writer) typeOfSrc类型的src的JSON表示写入writer
19 JsonElement toJsonTree(Object src) 此方法将指定对象序列化为与JsonElements树相同的表示形式。
20 JsonElement toJsonTree(Object src, Type typeOfSrc) 此方法将指定对象(包括泛型类型的对象)序列化为与JsonElements树相同的表示形式。
21 String toString() 转化为字符串的形式。

继承的方法

这个类继承了以下类的方法 -

  • java.lang.Object

示例

文件:GsonTester.java -

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder;  

public class GsonTester { 
   public static void main(String[] args) { 
      String jsonString = "{\"name\":\"Maxsu\", \"age\":24}"; 

      GsonBuilder builder = new GsonBuilder(); 
      builder.setPrettyPrinting(); 

      Gson gson = builder.create(); 
      Student student = gson.fromJson(jsonString, Student.class); 
      System.out.println(student);    

      jsonString = gson.toJson(student); 
      System.out.println(jsonString);  
   } 
}  
class Student { 
   private String name; 
   private int age; 
   public Student(){} 

   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; 
   } 
   public String toString() { 
      return "Student [ name: "+name+", age: "+ age+ " ]"; 
   }  
}

执行上面示例代码,得到以下结果 -

{ 
   "name" : "Maxsu", 
   "age" : 24 
}


相关问答

更多
  • Millennial实际上是通过重命名内部GSON库来修复SDK 5.0.1版本(将于下周发布,等待一些额外的质量保证)。 Millennial SDK未经修改使用GSON 2.2.2版。 你可以在MMSDK.jar中使用GSON,或者,如果绝对必要的话,可以使用Millennial的JAR,并删除“com / google / gson /”目录并重新启动它。 像往常一样,您也可以直接与Millennial联系: https : //tools.mmedia.com/user/supportDevPort ...
  • org.immutables:gson不是Gson的完整副本,它只是一个允许你将org.immutables库与Google的Gson一起使用的适配器。 The org.immutables:gson isn’t a full copy of Gson, it’s just an adapter that lets you use the org.immutables library with Google’s Gson.
  • 确保将gson.jar放在libs目录中。 从ADT17开始,所有外部图书馆罐子都必须去那里。 好消息是你只需将它们放在那里,工具就可以将它们添加到项目中。 哦,该目录需要与src和assets等处于同一级别。 Make sure you put the gson.jar in the libs directory. As of ADT17 all external library jars must go there. The good news is you just drop them in ther ...
  • Gson无法处理序列化数据中的循环引用。 你有机会。 解决这个问题,你已经解决了问题。 I created an issue for this on the google code site. http://code.google.com/p/google-gson/issues/detail?id=488
  • 添加导入语句 import java.lang.reflect.Type; 它是java语言的一部分,而不是来自外部库。 尝试使用自动导入快捷方式。 用于日食(Ctrl + Shift + O) 。 对于netbeans我不确定可能是(Ctrl + Shift + I) Add import statement import java.lang.reflect.Type; Its part of java language, not from external libraries. Try to use ...
  • 来自Gson用户指南 : 如果字段标记为瞬态(默认情况下),则忽略该字段,并且不包括在JSON序列化或反序列化中。 ... 默认情况下,如果将字段标记为瞬态,则会将其排除。 同样,如果某个字段标记为“静态”,则默认情况下会将其排除。 因此,解决问题的方法只是将logger标记为瞬态或静态,例如: transient Logger logger = Logger.getRootLogger(); 这样,变量将从序列化和反序列化中排除,并且您不会得到该错误。 From the Gson User Guide: ...
  • 向类添加一个空构造函数,因为这只会用于设置值,如果上下文未初始化,这不会导致任何问题 public UserValues() { } add an empty constructor to the class as this will only be used to set values this should not cause any issues if the context is not initialised public UserValues() { }
  • 我相信你把javac和java参数顺序混淆了。 语法是: javac 和 java [-options] class [args...] 所以它应该是这样的 javac -cp gson.jar myProgram.java java命令也是如此。 I believe you have the javac and java argument order mixed up. The syntax is: javac
  • 你可以做到这两点。 然而,使用JsonWriter将提供更好的性能:输出可以流式传输到文件中,而不是在将整个输出写入文件之前将其映射到内存中。 使用BufferedWriter : BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile)); Gson gson = new Gson(); gson.toJson(obj, new JsonWriter(bw)); // Write to file using BufferedWrit ...
  • JsonSerializer是序列化Object的字段,而不是对象本身。 但是,您传递的对象已经告诉Gson要序列化。 下列 @Override public JsonElement serialize(ControlTransaction ctr, Type type, JsonSerializationContext context) { return context.serialize(ctr, type); } 相当于 @Override public JsonElemen ...