使用GSON将JSON从serializeArray()转换为Java类
我在尝试使用Gson将JSON字符串从序列化HTML表单转换为Java类时遇到了一些问题 以下是JSON示例:使用GSON将JSON从serializeArray()转换为Java类,java,json,gson,jsonserializer,Java,Json,Gson,Jsonserializer,我在尝试使用Gson将JSON字符串从序列化HTML表单转换为Java类时遇到了一些问题 以下是JSON示例: [ { "name" : "ObjectClass", "value" : "Obama" }, { "name" : "ObjectType", "value" : "Person" }, { "name" : "Att_1_name", "value" : "Age" }, { "name" : "Att_1_value", "value" : "
[
{ "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;
}
}
}
package com.test.objectclasses;
导入java.util.ArrayList;
公共类tempJSON{
阿雷利斯特·英克森;
公共阵列列表getInJSON(){
返回inJSON;
}
公共无效setInJSON(ArrayList inJSON){
this.inJSON=inJSON;
}
公共类innerJSON{
私有字符串名称;
私有字符串值;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getValue(){
返回值;
}
公共void设置值(字符串值){
这个值=值;
}
}
}
你知道该怎么做吗,还是我想的全错了?提前感谢。首先,遵循Java命名约定。你的类名应该以大写字母开头。所以,上骆驼案 摆脱封闭类
tempJSON
,使用Gson#fromJson(..)
中的类型标记将其标记为列表,因为您有一个JSON数组
List<innerJSON> innerJSONs = gson.fromJson(yourStream, new TypeToken<List<innerJSON>>(){}.getType());
List innerJSONs=gson.fromJson(yourStream,new-TypeToken(){}.getType());
现在,列表
将包含与JSON中显示的一样多的innerJSON
对象。该数组的每个元素都是一个“对象”(Map),包含两个名称/值对。(他们为什么使用如此愚蠢的方案,我不知道。)另外,最后一行代码错误——几乎可以肯定它应该是“att_2_value”。因为它被搞得一团糟,我看不到直接映射到Java类的意义。最好将数据分解成一个映射,例如,{“ObjectClass”:“Obama”,…“att_2_value”:“African American”}
,然后,如果您仍然想要一个Java类,就从中构建一个。啊,是的!!有人所做的是序列化一个映射(没有意识到它是一个映射而不是一个自定义对象)来生成上面的JSON。映射在内部是一个名称/值对数组,因此序列化程序就是这样生成的。工作得非常好。谢谢你的回答和解释。