从JSON反序列化复杂嵌套java对象
所以我有一个java类工作区,它有产品类型列表字段,它包含模块类型列表字段,它包含对象类型列表字段 所以我有3层嵌套对象和列表。在JSON序列化和反序列化方面,最轻松的处理方法是什么 目前我正在用GSON进行序列化,这很好,但似乎没有优雅的方法来进行反序列化 我阅读了关于这个主题的所有答案,但没有找到任何能解决我问题的答案 这就是问题所在从JSON反序列化复杂嵌套java对象,java,json,jackson,gson,deserialization,Java,Json,Jackson,Gson,Deserialization,所以我有一个java类工作区,它有产品类型列表字段,它包含模块类型列表字段,它包含对象类型列表字段 所以我有3层嵌套对象和列表。在JSON序列化和反序列化方面,最轻松的处理方法是什么 目前我正在用GSON进行序列化,这很好,但似乎没有优雅的方法来进行反序列化 我阅读了关于这个主题的所有答案,但没有找到任何能解决我问题的答案 这就是问题所在 class Workspace{ List<Product> products; } class Product{ List<Module
class Workspace{
List<Product> products;
}
class Product{
List<Module> modules;
}
class Module{
List<Parameter> parameters;
}
class Parameter{
String name;
String type;
}
类工作区{
列出产品清单;
}
类产品{
列出模块;
}
类模块{
列出参数;
}
类参数{
字符串名;
字符串类型;
}
有没有办法用几行代码进行反序列化 如果值得改变,如果你愿意,我建议你去看看
Jackson
()。它可能通过很少或没有注释或自定义来实现开箱即用
Jackson是处理JSON的几个可用库之一。其他一些库是Boon、GSON和用于JSON处理的JavaAPI。
Jackson相对于其他库的一个优势是它的成熟度。Jackson已经发展到足以成为一些主要web服务框架的首选JSON处理库(…)”
DZone的这篇好文章可能会给你一些亮点:
尽管如此,由于您没有定义“优雅”对您意味着什么,并且您正在谈论的GSON
我同意这个答案可能不适合您(并且可能会消失;)
我阅读了关于这个主题的所有答案,但没有找到任何能解决我问题的答案
是的,如果您需要更多信息,您还需要向我们提供有关实际问题的详细信息
编辑:添加了Jackson的示例代码。
以下是Jackson带来的优雅效果(当然,通过工厂、建设者、助手等预先配置的映射器,效果会更好)
请看我更新问题的最后一部分好的,我用Jackson 2添加了一个示例代码
public class Workspace {
final ObjectMapper objMapper = new ObjectMapper();
List<Product> products;
public Workspace() {
}
public Workspace(List<Product> products) {
this.products = products;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
public String serialize() throws IOException {
try {
return objMapper.writerWithDefaultPrettyPrinter().writeValueAsString(this);
}catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static Workspace deserialize(String json) throws IOException {
return new ObjectMapper().readValue(json, Workspace.class);
}
}
public class Product {
List<Module> modules;
public Product() {
}
public Product(List<Module> modules) {
this.modules = modules;
}
public List<Module> getModules() {
return modules;
}
public void setModules(List<Module> modules) {
this.modules = modules;
}
}
public class Module {
List<Parameter> parameters;
public Module() {
}
public Module(List<Parameter> parameters) {
this.parameters = parameters;
}
public List<Parameter> getParameters() {
return parameters;
}
public void setParameters(List<Parameter> parameters) {
this.parameters = parameters;
}
}
public class Parameter {
String name;
String type;
public Parameter() {
}
public Parameter(String name, String type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
public class WorkspaceTest {
/**
* Test of serialize method, of class Workspace.
*/
@Test
public void testSerDeserialize() throws Exception {
// Build sample:
Workspace instance = new Workspace(
Collections.singletonList(new Product(
Collections.singletonList(new Module(
Collections.singletonList(new Parameter("Hello","World")))))));
// SER
String serialized = instance.serialize();
assertNotNull(serialized);
System.out.println("Serialized JSON: \n"+serialized);
// DSER
Workspace deserialized = Workspace.deserialize(serialized);
// MATCH
assertEquals(serialized, deserialized.serialize());
System.out.println("Match!");
}
}
Serialized JSON:
{
"products" : [ {
"modules" : [ {
"parameters" : [ {
"name" : "Hello",
"type" : "World"
} ]
} ]
} ]
}
Match!