GSON有几个已知的类

时间:2016-07-06 14:04:44

标签: java json gson

我有以下json

{ "file": {"file": "foo.c", "owner": "user123"}
  "methods": [{"name": "proc1", "value":"val"}, {"name":"proc2","value":"val2"}]
  etc...
}

我知道我可以做类似

的事情
class file{
      public String file
      public String owner
    }
class methods{
      public String name
      public String value
    }

我可以打电话

File file= gson.fromJson(jsonInString, File.class);  
methods[] array = gson.fromJson(jsonInString, methods[].class);

但如果我需要处理包含许多对象的复杂json,我该怎么办呢 我无法指定gson.fromJson(jsonInString, ListOfClasses)

1 个答案:

答案 0 :(得分:1)

我通常按照这种方法获取从json转换为object的任何复杂类。这种方法几乎适用于列表,地图等所有内容。这个想法是复杂类的简单创建持有者,然后创建类。尽可能多地提供深度。诀窍是匹配Json中的名字和你的持有者(和子类)。

文件配置:

class FileConfig{
  public String file;
  public String owner;

  //define toString, getters and setters 
}

方法类:

class Method{
  public String name;
  public String value;

  //define toString, getters and setters   
}

方法配置:

class MethodConfig{
  List<Method> methods = null;

  //define toString, getters and setters 
}

按住配置:

public class HolderConfig {

  private FileConfig file = null;
  private MethodConfig methods = null;

  public FileConfig getFile() {
    return file;
  }

  public void setFile(FileConfig file) {
    this.file = file;
  }
  public MethodConfig getMethods() {
    return file;
  }

  public void setMethods(MethodConfig methods) {
    this.methods = methods;
  } 
}

构建配置:

public class HolderConfigBuilder {

public static HolderConfig build(JsonObject holderConfigJson) {

    HolderConfig configHolderInstance = null;         

    Gson gsonInstance = null;

    gsonInstance = new GsonBuilder().create();

    configHolderInstance = gsonInstance.fromJson(holderConfigJson,HolderConfig.class);

    return configHolderInstance;
  }
}

演示课程:

public class App 
{
      public static void main( String[] args )
      {

           HolderConfig configHolderInstance = null;
           FileConfig file = null;
           configHolderInstance = HolderConfigBuilder.build(<Input Json>);
           file = configHolderInstance.getFile();
           System.out.println("The fileConfig is : "+file.toString());
      }
 }

输入Json:

{ "file": {"file": "foo.c", "owner": "user123"}
  "methods": [
               {"name": "proc1", "value":"val"},
               {"name":"proc2","value":"val2"}
             ]
}

注意:编写代码以在测试代码中获取输入JSON。

这样,无论何时向JSON添加更多元素,都必须为该元素创建一个单独的类,只需将与json相同的元素名称添加到HolderConfig中。您无需更改其余代码。

希望它有所帮助。