解析JSON字符串返回未定义的结果
Parsing JSON string returns undefined
这是我的java方法:
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();
}
下面是我如何将其转换为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();
我从服务器端得到以下JSON字符串:
{
"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'"}]"
}
我把它转换成这样:
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);
}
}
在所有三个日志中,我都得到了"未定义"。请告诉我如何从下面的json字符串中获取"event_id"值?
"result": "'"[{'''"event_id'''":'''"2139114'''"}]'""
I checked validity of json string online and it says no errors found.
这里有什么问题吗?或者如何访问"eventid"字段?
首先,您需要重新考虑getEvents方法以仅返回普通对象(例如List),然后将结果放入目标映射中,然后将其传递给toJSON方法
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;
}
然后,像这样转换你的结果:
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);
我更改了我的java方法如下:
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;
}
并使用dto类如下:
public class UKDashboardEventDTO implements Serializable{
private Long eventId;
............
}
并传递这样的值:
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) {
}
不想对客户端逻辑做任何更改。这很管用!
相关文章:
- 试图将onChange函数作为道具传递给GrandChlidren,结果是TypeError:这是未定义的
- 解析-为什么user.getSessionToken()返回未定义的结果
- Chrome扩展,Chrome.tabs.query的结果未定义
- 从JSON API结果迭代时未定义
- json-api和错误结果:无法读取属性'长度'的未定义
- 在页面对象文件中验证sendKeys结果会导致未定义的错误(Protractor)
- Meteor js-控制台显示'未定义'即使返回结果
- 获取结果未定义(主干.js)
- 从 Angular 数据工厂中的 HTTP POST 请求接收未定义的结果
- 离子警报 - 检查结果是否未定义
- 使用String.FromCharCode时,jQuery返回未定义的结果
- 解析JSON字符串返回未定义的结果
- Javascript:添加键值对文字,给出未定义的结果
- Javascript/Underscore赢得't跳过未定义的结果
- 为什么这个JavaScript代码的结果是“;未定义”;
- 当我尝试两个 DOM 中的 get 元素时,HTML 和 Xpath 结果未定义
- 节点函数结果未定义
- GWT JSNI - Java到Javascript返回到Java结果未定义的参数
- 循环的结果未定义
- 点击获取元素 ID 结果未定义的 jquery