使用 GSON 将 JSON 从 serializeArray() 转换为 Java 类
Posted
技术标签:
【中文标题】使用 GSON 将 JSON 从 serializeArray() 转换为 Java 类【英文标题】:Convert JSON from serializeArray() to Java class with GSON 【发布时间】: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 在内部是一个名称/值对数组,所以这就是序列化程序产生的。
【参考方案1】:
首先,遵循 Java 命名约定。你的类名应该以大写字母开头。所以上驼峰式。
摆脱封闭类tempJSON
并使用Gson#fromJson(..)
中的类型标记将其标记为List
,因为您有一个JSON 数组。
List<innerJSON> innerJSONs = gson.fromJson(yourStream, new TypeToken<List<innerJSON>>().getType());
现在List
将包含与您的 JSON 中一样多的 innerJSON
对象。
【讨论】:
完美运行。感谢您的回答和解释。以上是关于使用 GSON 将 JSON 从 serializeArray() 转换为 Java 类的主要内容,如果未能解决你的问题,请参考以下文章
Gson toJson 返回 JSON 字符串而不是 JSON 对象
使用 GSON 序列化到 JSON 的类是不是应该实现可序列化接口
用Gson将json转换为List<JavaBean>时,报declares multiple JSON fields named serialVersionUID