如何在servlet中使用GSON解析此JSON字符串

时间:2012-11-30 15:35:10

标签: java json servlets gson

如何解析此JSON字符串以在servlet中创建集合对象

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

我的servlet中的内部类

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字符串http://jsfiddle.net/testtracker/XDNLp/

的jsfiddle

客户端表单提交功能

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

    }
  });

这就是我现在所拥有的。我正确的方式吗?接下来我应该怎么做System.print呢?

2 个答案:

答案 0 :(得分: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"]

所以我仍然认为servlet接收的输入不正确(或者您没有提供现有代码的准确描述)。请将上面的示例与您的真实代码进行比较。

答案 1 :(得分:1)

尝试

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

List是一个抽象类(所以GSON不知道如何创建它)