繁体   English   中英

如何从Servlet将Javascript JSON数组解析为ArrayList

[英]How to parse Javascript JSON array into ArrayList from Servlet

我有一个Angular JS函数,它将JSON数组发送到Java Servlet。 使用GSON类,我试图将该数组解析回String的ArrayList(或以后的另一个Class)。 不幸的是,看起来我得到的ArrayList为null。 有什么建议吗?

编辑:我忘记了request.getReader(),它现在可以工作了。

已发送的有效负载:

{"answers":["answer1","answer2"]}

Angular JS代码:

    $scope.test = function() {
        var answers = [];
        answers.push('answer1');
        answers.push('answer2');
        $http({
            method: 'POST',
            url: '/test', 
            data: { answers: answers }
        }).success(function(result) {
            // RESULT IS NULL
        }).error(function(result) {
        });
    };

Java Servlet代码:

    Gson gson = new Gson();
    JsonElement jsonElement = gson.fromJson(request.getReader(), JsonElement.class);
    JsonObject jsonObject = jsonElement.getAsJsonObject();
    ArrayList<String> answers = gson.fromJson(jsonObject.get("answers").getAsJsonArray(), new TypeToken<ArrayList<String>>(){}.getType());

您不能使用request.getParameter来获取从Angular传递的JSON消息。 相反,您必须使用request.getReader

Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonObject obj = (JsonObject) parser.parse(request.getReader());

现在,JsonObject将收到您发送的消息。 现在,您可以使用此obj将其转换为数组列表。

同样在您的Angular $ http帖子中,将数据设置为如下所示的answers

$http({
            method: 'POST',
            url: '/test', 
            data: JSON.stringify(answers)
        }).success(function(result) {
            // RESULT IS NULL

拥有JsonObject之后,可以使用它将其转换为ArrayList

ArrayList<String> listdata = new ArrayList<String>();     
JSONArray jArray = (JSONArray)jsonObject; 
if (jArray != null) { 
   for (int i=0;i<jArray.length();i++){ 
    listdata.add(jArray.get(i).toString());
   } 
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM