Reputation: 1649
This is my java method:
public String getEvents(String cat, int start, int step) {
//JSONArray list = new JSONArray();
List<String> list = new ArrayList();
if (cat.equalsIgnoreCase("D")){
for (int i=0; i<listDog.size(); i++){
JSONObject obj = new JSONObject();
System.out.println("di=" + i + "=" + (String)listDog.get(i));
obj.put("event_id",new String((String)listDog.get(i)));
list.add(obj.toJSONString());
}
}
else {
for (int i=0; i<listHorse.size(); i++){
JSONObject obj = new JSONObject();
System.out.println("i=" + i + "=" + (String)listHorse.get(i));
obj.put("event_id",new String((String)listHorse.get(i)));
list.add(obj.toJSONString());
}
}
return list.toString();
}
and below is how I convert it to json:
Map map = new HashMap();
Gson gson = new GsonBuilder().disableHtmlEscaping().create()
....
String result = service.getEvents(cat, Integer.parseInt(start), Integer.parseInt(step));
String objs = gson.toJson(result);
map.put("result", objs);
.....
String output = gson.toJson(map);
System.out.println("output->" + output);
out.println(output);
out.flush();
out.close();
I'm getting the below JSON string from the server side:
{
"result": "\"[{\\\"event_id\\\":\\\"2139114\\\"}]\"",
"eventList": "[{\"eventId\":164151,\"meetingCode\":\"5G8QV\",\"meetingName\":\"Kranji\",\"eventTime\":\"13:20:00\",\"eventCode\":\"07:50:00\",\"category\":\"HR\"},{\"eventId\":163890,\"meetingCode\":\"5G8MW\",\"meetingName\":\"Henlow\",\"eventTime\":\"02:30:00\",\"eventCode\":\"21:00:00\",\"category\":\"DG\"}]"
}
and I convert it like this:
success: function(data) {
console.log("SERVLET DATA: " + data.replace("\n", ""));
if (typeof(data) !== 'undefined' && data !== '' && data !== null) {
data = data.replace("\n", "");
var jsonData = JSON.parse(data);
//console.log(jsonData);
for (var i in jsonData) {
var event = jsonData[i];
var event2 = JSON.stringify(jsonData[i]);
var event3 = JSON.parse(event);
console.log("init:" + event.event_id);
}
}
in all three logs, I'm getting "undefined". Please tell me how can I get the "event_id" value from the below json string?
"result": "\"[{\\\"event_id\\\":\\\"2139114\\\"}]\""
I checked validity of json string online and it says no errors found.
is there any issue here or how to access "event_id" field ?
Upvotes: 1
Views: 815
Reputation: 1649
I changed my java method as below:
public List < UKDashboardEventDTO > getEvents(String cat, int start, int step) {
//JSONArray list = new JSONArray();
List < UKDashboardEventDTO > list = new ArrayList();
UKDashboardEventDTO dto;
if (cat.equalsIgnoreCase("D")) {
for (int i = start - 1; i < listDog.size(); i = i + step) {
//JSONObject obj = new JSONObject();
dto = new UKDashboardEventDTO();
System.out.println("di=" + i + "=" + (String) listDog.get(i));
dto.setEventId(Long.parseLong(listDog.get(i).toString()));
list.add(dto);
}
} else if (cat.equalsIgnoreCase("H")) {
for (int i = start - 1; i < listHorse.size(); i = i + step) {
dto = new UKDashboardEventDTO();
System.out.println("di=" + i + "=" + (String) listHorse.get(i));
dto.setEventId(Long.parseLong(listHorse.get(i).toString()));
list.add(dto);
}
} else if (cat.equalsIgnoreCase("A")) {
for (int i = start - 1; i < listAll.size(); i = i + step) {
dto = new UKDashboardEventDTO();
System.out.println("di=" + i + "=" + (String) listAll.get(i));
dto.setEventId(Long.parseLong(listAll.get(i).toString()));
list.add(dto);
}
}
return list;
}
and used the dto class as below:
public class UKDashboardEventDTO implements Serializable{
private Long eventId;
............
}
and pass the values like this:
List < UKDashboardEventDTO > result = service.getEvents(cat, Integer.parseInt(start), Integer.parseInt(step));
map.put("result", result);
//out.println(objs);
.......
try {
String objs = gson.toJson(map);
System.out.println("objs->" + objs);
out.println(objs);
out.flush();
out.close();
} catch (Exception ex) {
}
did not want to do any change to the client side logic. this works !
Upvotes: 0
Reputation: 1169
Firstly, you need to re-factor the getEvents method to return only plain objects (e.g. List), then, put the result in to the target map before passing it to the toJSON method
public class Event {
String event_id;
Event(String event_id) {
this.event_id = event_id;
}
}
public List<Event> getEvents(String cat, int start, int step) {
List<Event> list = new ArrayList<Event>();
if (cat.equalsIgnoreCase("D")){
for (int i=0; i<listDog.size(); i++){
System.out.println("di=" + i + "=" + (String)listDog.get(i));
list.add( new Event( (String)listDog.get(i) ));
}
}
else {
for (int i=0; i<listHorse.size(); i++){
System.out.println("i=" + i + "=" + (String)listHorse.get(i));
list.add( new Event( (String)listHorse.get(i) ));
}
}
return list;
}
Then, convert your result like this:
Map map = new HashMap();
Gson gson = new GsonBuilder().disableHtmlEscaping().create()
....
List<Event> result = service.getEvents(cat, Integer.parseInt(start), Integer.parseInt(step));
map.put("result", result);
String objs = gson.toJson(map);
Upvotes: 1