将复杂Java对象映射到Json数组
我有一个包含动画列表的Ann类。动画包含属性id、名称和信息列表 安 这将产生:将复杂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
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);
}