我的 json 字符串是:
{
"sigTemplateId": 1,
"name": "Test Ticket Template",
"groups": "[{\"sigTemplateId\": 1, \"sigTemplateGroupId\": 1, \"name\": \"Group 1\", \"ordinal\": 1}]"
}
这从我的 jsp 发送到 servlet。 Servlet 代码是:
Gson gson = new Gson();
if (jsonData != null) {
Type objType = new TypeToken<SigTemplateObj>() {}.getType();
SigTemplateObj sigTemplateToSave = gson.fromJson(jsonData, objType);
//SigTemplateObj sigTemplateToSave = gson.fromJson(jsonData, SigTemplateObj.class);
}
我得到了:java.lang.IllegalStateException:这不是一个 JSON 数组。 gson 试图解析组数组:JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@1f4db697 无法反序列化 json 对象“[{\"sigTemplateId\": 1,\"sigTemplateGroupId\": 1,\"name\":\"Group 1\",\"ordinal\": 1}]"给定类型 java.util.ArrayList
我的目标代码是:
public class SigTemplateObj {
int sigTemplateId;
String dyninkName;
int dyninkFormId;
String name;
//children collections
ArrayList<SigTemplateFieldObj> fields;
ArrayList<SigTemplateGroupObj> groups;
...
}
public class SigTemplateGroupObj {
int sigTemplateGroupId;
int sigTemplateId;
int ordinal;
String name;
...
}
我已经尝试了上面的代码和这一行,并且两次都得到了相同的结果。
SigTemplateObj sigTemplateToSave = gson.fromJson(jsonData, SigTemplateObj.class);
如有任何帮助,我们将不胜感激。 谢谢, 埃里克
现在我只需要修复我的 javascript 以将组数组视为数组而不是字符串:
var testObject = new Object();
testObject.sigTemplateId = 1;
testObject.name = 'Test Ticket Template';
testObject['groups'] = [];
var testGroup = new Object();
testGroup.sigTemplateId = 1;
testGroup.sigTemplateGroupId = 1;
testGroup.name = 'Group 1';
testGroup.ordinal = 1;
testObject.groups.push(testGroup);
var json = JSON.stringify(testObject);
最佳答案
groups数组不是一个数组,而是一个字符串:
"groups": "..."
试试这个 JSON:
{
"sigTemplateId": 1,
"name": "Test Ticket Template",
"groups": [{"sigTemplateId": 1, "sigTemplateGroupId": 1, "name": "Group 1", "ordinal": 1}]
}
关于java - 使用 gson 时出现错误而不是 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14365416/