我想序列化这个JSON结构:
{
"name":"name 1",
"number":1,
"standing":[
{
"subRank":1,
"subname":"test"
},
{
"subRank":2,
"subname":"Test2"
}]
}
我想使用像这样的对象关联:
public class ParentClass{
String name;
String number;
List<SubClass> SubClassList;
}
public class SubClass{
String subRank;
String subname;
}
我尝试使用此代码:
Type type = new TypeToken<List<ParentClass>>() {}.getType();
ArrayList<ParentClass> parentClassList= new ArrayList<>();
parentClassList= gson.fromJson(jsonContent, type);
但我有这个例外:
线程“main”com.google.gson.JsonSyntaxException中的异常: java.lang.IllegalStateException:预期BEGIN_ARRAY但是 BEGIN_OBJECT在第1行第2列路径$
感谢您的帮助:)
答案 0 :(得分:0)
首先,您的json结构无效。
从下面删除最后一个逗号
"subname":"Test2",
并且您的json结构不是列表,它是对象结构,您尝试将其解析为列表。
将您的代码更改为:
ParentClass parentClassList= gson.fromJson(data.get(0), type);
或者使用“[]”符号将json结构更改为数组换行。
这适用于我:
Gson gson = new Gson();
Type type = new TypeToken<ParentClass>() {}.getType();
ParentClass parentClassList= gson.fromJson(data, type);
System.out.println(parentClassList.name);
JSON:
{"name":"name 1","number":1,"standing":[{"subRank":1,"subname":"test"},{"subRank":2,"subname":"Test2"}]}
答案 1 :(得分:0)
您正在尝试的方法是反序列化集合(here,您可以阅读一个非常好的示例)。但这不是你的情况。
如果你想序列化这个json:
{
"name":"name 1",
"number":1,
"standing":[
{
"subRank":1,
"subname":"test"
},
{
"subRank":2,
"subname":"Test2"
}]
}
您的课程结构不正确。
首先,您的number
和subRank
不是String
。
其次,必须将此List<SubClass> SubClassList;
称为standing
。
所以,父类将是:
public class ParentClass {
String name;
Number number;
Collection<SubClass> standing;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Number getNumber() {
return number;
}
public void setNumber(Number number) {
this.number = number;
}
public Collection<SubClass> getStanding() {
return standing;
}
public void setStanding(Collection<SubClass> standing) {
this.standing = standing;
}
}
子类:
public class SubClass {
Number subRank;
String subname;
public Number getSubRank() {
return subRank;
}
public void setSubRank(Number subRank) {
this.subRank = subRank;
}
public String getSubname() {
return subname;
}
public void setSubname(String subname) {
this.subname = subname;
}
}
如果你想测试:
public class Test {
public static void main (String args[])
{
Gson gson = new Gson();
SubClass sc = new SubClass();
sc.setSubRank(1);
sc.setSubname(("test"));
SubClass sc2 = new SubClass();
sc2.setSubRank(2);
sc2.setSubname(("Test2"));
LinkedList<SubClass> list= new LinkedList<>();
list.add(sc);
list.add(sc2);
ParentClass pc = new ParentClass();
pc.setName("name 1");
pc.setNumber(1);
pc.setStanding(list);
System.out.println(gson.toJson(pc));
}
}
答案 2 :(得分:0)
我和GSON做了非常相似的事情。
以下示例。希望它指出你正确的方向......
public class ParentClass{
String name;
String number;
@SerializedName("standing")
SubClass[] SubClassList;
}
public class SubClass{
String subRank;
String subname;
}
答案 3 :(得分:0)
我这样解决了我的情况:
JSON :
{
"name":"name 1",
"number":1,
"standing":[
{
"subRank":1,
"subname":"test"
},
{
"subRank":2,
"subname":"Test2"
}]
}
POJO :
public class ParentClass{
String name;
int number;
List<SubClass> standing;
}
public class SubClass{
int subRank;
String subname;
}
JAVA :
Gson gson = new Gson();
Type type = new TypeToken<ParentClass>() {}.getType();
ParentClass parentClassList= gson.fromJson(data, type);
非常感谢@Emre,@ Christoph-Tobias Schenke和@Davide Patti