2

このJSON文字列を解析してサーブレットにコレクションオブジェクトを作成するにはどうすればよいですか

{"title":["1","2"],"amount":["1","3"]}

サーブレットの内部クラス

public class Data {
    private List<String> title;
    private List<String> amount;
  //getters and setters
}

jsonの解析

Gson gson = new Gson();
String param=request.getParameter("info");
Data data = gson.fromJson(param, Data.class);
List<String> a=data.getTitle();
 if(a==null){p("a null");}else{p("a not null");} //here a is null, prints "a null"

これが私がjson文字列を作成する方法のjsfiddleですhttp://jsfiddle.net/testtracker/XDNLp/

フォーム送信機能のクライアント側

var dataString=JSON.stringify($(this).serializeObject());
$.ajax({
    type: "POST",
    url: URL,
    data: {"info":JSON.stringify($(this).serializeObject())},
    success: function(data){

    }
  });

これは私が今まで持っているものです。私は正しい道を進んでいますか?次に、System.printを実行するにはどうすればよいですか?

4

2 に答える 2

2

何かを解決できないときは、理解が正しいことを確認するために、可能な限り最小のプログラムを作成します。あなたの場合、私はこれを思いついた:

import java.util.List;
import com.google.gson.Gson;
public class GsonTest {

public static class Data {
    private List<String> title;
    public List<String> getTitle() {return title;}
    public Data() {}
}

public static void main (String [] args) {
    Gson gson = new Gson();
    Data data = gson.fromJson("{\"title\":[\"1\",\"2\"]}", Data.class);
    System.out.println(data.getTitle());
} 
}

コンパイルして実行すると、次のように出力されます。

["1", "2"]

したがって、サーブレットが受け取る入力は正しくないと私はまだ信じています(または既存のコードの正確な説明を提供していません)。上記の例を実際のコードと比較してください。

于 2012-11-30T16:22:44.037 に答える
1

試す

public class Data {
    private ArrayList<String> title;
    private ArrayList<String> amount;
  //getters and setters
}

リストは抽象クラスです(したがって、GSONはそれを作成する方法を知りません)

于 2012-11-30T15:55:15.747 に答える