1

我的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);
4

1 回答 1

2

groups 数组不是数组,而是字符串:

"groups": "..."

试试这个 JSON:

{
    "sigTemplateId": 1,
    "name": "Test Ticket Template",
    "groups": [{"sigTemplateId": 1, "sigTemplateGroupId": 1, "name": "Group 1", "ordinal": 1}]
}
于 2013-01-16T18:45:15.073 回答