这是我的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.
这里有什么问题或者如何访问“event_id”字段吗?
最佳答案
首先,您需要重构 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 - 解析 JSON 字符串返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28807142/