【发布时间】:2014-04-26 15:06:58
【问题描述】:
我在尝试使用 Gson 将 JSON 字符串从序列化 HTML 表单转换为 Java 类时遇到了一些麻烦。
以下是 JSON 示例:
[
{ "name" : "ObjectClass", "value" : "Obama" },
{ "name" : "ObjectType", "value" : "Person" },
{ "name" : "Att_1_name", "value" : "Age" },
{ "name" : "Att_1_value", "value" : "52" },
{ "name" : "Att_2_name", "value" : "Race" },
{ "name" : "Att_2_name", "value" : "African American" }
]
如您所见,它传递一个数组,然后该数组的每个元素由一个名称和一个值组成。
我对如何设置我的 Java 类以便 Gson 可以转换它有些迷茫。还应该注意的是,数组中的元素数量是可变的(用户可以有多少属性)。
我在课堂上的(不正确的)尝试是:
package com.test.objectclasses;
import java.util.ArrayList;
public class tempJSON {
ArrayList<innerJSON> inJSON;
public ArrayList<innerJSON> getInJSON() {
return inJSON;
}
public void setInJSON(ArrayList<innerJSON> inJSON) {
this.inJSON = inJSON;
}
public class innerJSON {
private String name;
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}
知道如何解决这个问题,还是我认为这一切都错了?提前致谢。
【问题讨论】:
-
该数组的每个元素都是一个包含两个名称/值对的“对象”(映射)。 (我不知道他们为什么要使用如此愚蠢的方案。)此外,最后一行编码错误——几乎可以肯定它应该是“att_2_value”。
-
因为它被严重搞砸了,我看不出尝试直接映射到 Java 类的意义。最好将数据分解成一个 Map,例如
{"ObjectClass":"Obama",..."att_2_value":"African American"},然后,如果您仍然想要一个 Java 类,请从该类中构建一个。 -
啊,是的!某人所做的是序列化 Map(没有意识到它是 Map 而不是自定义对象)以生成上述 JSON。 Map 在内部是一个名称/值对数组,所以这就是序列化程序产生的。
标签: java json gson jsonserializer