将复杂Java对象映射到Json数组

将复杂Java对象映射到Json数组,java,arrays,json,object,Java,Arrays,Json,Object,我有一个包含动画列表的Ann类。动画包含属性id、名称和信息列表 安 这将产生: Results:{"name":"Neon Genesis Evangelion: The End of Evangelion","id":"419","url":"http://cdn.animenewsnetwork.com/thumbnails/fit200x200/encyc/A419-28.jpg"}{"name":"Neon Genesis Evangelion: Death \u0026 Rebirt

我有一个包含动画列表的Ann类。动画包含属性id、名称和信息列表

这将产生:

Results:{"name":"Neon Genesis Evangelion: The End of Evangelion","id":"419","url":"http://cdn.animenewsnetwork.com/thumbnails/fit200x200/encyc/A419-28.jpg"}{"name":"Neon Genesis Evangelion: Death \u0026 Rebirth","id":"418","url":"http://cdn.animenewsnetwork.com/thumbnails/fit200x200/encyc/A418-12.jpg"}{"name":"Neon Genesis Evangelion","id":"49","url":"http://cdn.animenewsnetwork.com/thumbnails/fit200x200/encyc/A49-16.jpg"}
这很好,但不是正确的JSON格式,是吗?每个条目之间不应该有逗号吗

我这样做是因为我读到您需要JSON格式的数据,以便使用javascript/jquery将其显示在网页上

最终,我希望能够获取这个搜索结果数据,并以图片格式向用户显示jquery风格的可操作列表

我的问题是,你能帮我弄清楚如何将数据格式化为一个正确的JSON字符串吗

我花了最后一个小时研究在我的Ann类上添加一个toString()方法,尝试直接返回它的属性,而不是访问单个动画属性,类似这样

安类

//    @Override
//    public String toString(){
//        
//        String masterList = ""; 
//        
//        for (Anime ann : this.Ann){
//        
//           masterList = masterList +  ann.getName();
//            
//        }
//        return masterList;
//    }
Servlet方法

//        try{
//            String ann1 = annj.Unmarshalling(searchQuery).getAnn().toString(); 
//            
//            map.put("hi", ann1);
//            
//            response.getWriter().write(new Gson().toJson(map));
//            
//        }catch(Exception e){} 
这似乎无法正确地访问对象数据,我中止了它,因为我可能会永远走在这条小路上,这可能是不必要的。(仔细想想,它看起来很不错……但我不知道)


谢谢你的阅读

您正在一次又一次地绑定到打印地图对象,而不是响应;这就是为什么你看到地图上没有逗号。将贴图对象放在ArrayList中并打印它。它应该会起作用

private void returnResults(HttpServletResponse response, String searchQuery) throws IOException{

  //arraylist to hold your Mapped String values.
  ArrayList<Map> arrayOfMap = new ArrayList<Map>(); 
 try{

for (Anime anime : annj.Unmarshalling(searchQuery).getAnn()) {
        Map <String, String> map = new HashMap<String, String>();
        map.put("name", anime.getName());
                map.put("id", anime.getId());

                for (Info temp : anime.getAnime()) {
                    if (temp.getSrc() != null) {

 map.put("url", temp.getSrc());

    }
                }

         //add map to arrayList
         arrayOfMap.add(map);


  }
  //once ready, print all arraylist on response
  response.getWriter().write(new Gson().toJson(arrayOfMap));

  }catch(Exception e){} 

Info
s也有同样的“递归”问题,但你是对的,你绝对是个超级明星。非常感谢。我不可能去想映射的事情,尤其是当我在想我应该用toString()和类似Map之类的东西或者任何你能想到的东西走另一条路的时候。有一次,我为multimaps安装了Guava。我已经截屏了我的输出,使其看起来正确(我还不知道JSON的任何知识!),我的下一步将是看看如何使用javascript将元素显示到我的jsp网页上。谢谢不要担心进一步的讨论,我会花10个小时研究它/教程,让我的前端工作:)我会想出如何接受答案……我遇到了很多麻烦,但我发现我必须先将json字符串转换为json对象,然后才能工作<代码>$.each(JSON.parse(data)、function(listID、mapData){。我的IDE说listID未使用,但如果我删除它,它就会停止工作,所以让我们继续吧!我想你错认为我有一个data.result,而实际上我只是使用html打印“Results:”到屏幕上。哦,糟糕,这只是打印最后一个条目的数据。我想我只是让它为每个条目生成一个新的html元素,而不是打印到同一个条目
//    @Override
//    public String toString(){
//        
//        String masterList = ""; 
//        
//        for (Anime ann : this.Ann){
//        
//           masterList = masterList +  ann.getName();
//            
//        }
//        return masterList;
//    }
//        try{
//            String ann1 = annj.Unmarshalling(searchQuery).getAnn().toString(); 
//            
//            map.put("hi", ann1);
//            
//            response.getWriter().write(new Gson().toJson(map));
//            
//        }catch(Exception e){} 
private void returnResults(HttpServletResponse response, String searchQuery) throws IOException{

  //arraylist to hold your Mapped String values.
  ArrayList<Map> arrayOfMap = new ArrayList<Map>(); 
 try{

for (Anime anime : annj.Unmarshalling(searchQuery).getAnn()) {
        Map <String, String> map = new HashMap<String, String>();
        map.put("name", anime.getName());
                map.put("id", anime.getId());

                for (Info temp : anime.getAnime()) {
                    if (temp.getSrc() != null) {

 map.put("url", temp.getSrc());

    }
                }

         //add map to arrayList
         arrayOfMap.add(map);


  }
  //once ready, print all arraylist on response
  response.getWriter().write(new Gson().toJson(arrayOfMap));

  }catch(Exception e){} 
$.each(data.result, function(listID, mapData){
     /* I am assuming you will create Lable for each String in JSON inside your HTML */
    $("#displaySearchResults > idLable").text(mapDate.id);
    $("#displaySearchResults > nameLable").text(mapDate.name);
    $("#displaySearchResults > urlLable").text(mapDate.url);

}