java - 解析 JSON 字符串返回未定义

标签 java javascript jquery json angularjs

这是我的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/

相关文章:

java - 事件时间过期的消息导致 java 堆空间 OutOfMemory 错误

java - 如何使用另一个字符串中的字符替换字符串中的字符(Caesar Cypher)(JAVA)

javascript - 为什么我的 yarn.lock 文件中有僵尸包?

jquery - 使用jquery在照片顶部显示可点击的箭头(悬停)

javascript - Datepicker打开有些问题

javascript - 在 Web Api Controller 中将 JSON 反序列化为字典

java - Apache POI 在 Excel 中的单元格内创建行或表格

java - Maven NAR 插件 + webapp 中的 Spring boot,在 Tomcat 中加载 .nar Artifact

Javascript/CMS/editEase - 存在哪些 JS/前端嵌入式 CMS?

javascript - 为什么 react 不更新 "then" promise 中的状态?