1

私のjson文字列は次のとおりです。

{
    "sigTemplateId": 1,
    "name": "Test Ticket Template",
    "groups": "[{\"sigTemplateId\": 1, \"sigTemplateGroupId\": 1, \"name\": \"Group 1\", \"ordinal\": 1}]"
}

これは私のjspからサーブレットに送信されます。サーブレットコードは次のとおりです。

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 に答える