我有一个包含动画列表的Ann类。动漫包含属性id,名称和信息列表。
安
package entities;
import javax.xml.bind.annotation.*;
import java.util.*;
import javax.ejb.Stateless;
@Stateless
@XmlRootElement(name = "ann")
public class Ann {
private List<Anime> Ann = new ArrayList<Anime>();
@XmlElement(name="anime")
public List<Anime> getAnn() {
return Ann;
}
public void setAnn(List<Anime> Ann) {
this.Ann = Ann;
}
public Ann() {
super();
}}
我想拿Ann(动画对象列表)并将其解析为Json,由Gson发送到ajax,以便最终可以通过jsp在我的jsp网页上使用/显示各个元素。
我在某种程度上使用了它:
private void returnResults(HttpServletResponse response, String searchQuery) throws IOException{
Map <String, String> map = new HashMap<String, String>();
try{
for (Anime anime : annj.Unmarshalling(searchQuery).getAnn()) {
map.put("name", anime.getName());
map.put("id", anime.getId());
for (Info temp : anime.getAnime()) {
if (temp.getSrc() != null) {
map.put("url", temp.getSrc());
}
}
response.getWriter().write(new Gson().toJson(map));
}
}catch(Exception e){}
我将数据发送到:
$(document).ready(function(){
$('#searchForm').submit(function(){
$.ajax({
url: 'search',
type: 'POST',
dataType: 'text',
data: $('#searchForm').serialize(),
success: function(data){
// if(data.isValid){
// alert("hi");
$('#displaySearchResults').html("Results:" + data);
// $('#displaySearchResults').slideDown(500);
// }
// else{
// alert('Enter a valid search term.');
// }
}
});
return false;
});
});
这会产生:
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()方法,试图直接返回它的属性而不是访问单独的Anime属性,就像这样
Ann class
// @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){}
这似乎无法正确访问对象数据,因为我可以永远沿着那条小巷走下去而且它可能是不必要的。 (根据第二个想法,它看起来相当不错......但我不知道)
谢谢你的阅读。
答案 0 :(得分:0)
你想要一次又一次地打印Map对象而不是响应;这就是因为你看到地图打印时没有逗号。将地图对象放在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){}
在客户端获得结果后,您可以迭代JSON以在页面上打印数据;
$.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);
}