gpt4 book ai didi

javascript - 将 JSON 数组添加到服务器端事件的返回

转载 作者:行者123 更新时间:2023-12-03 21:30:06 27 4
gpt4 key购买 nike

目前我正在以 JSON 格式写入数据,一次一条消息,如下所示:

String[] arr = strLine.split(",");

out.append("data: {\n");
out.append("data: \"c1\": " + arr[0].toString()+ ",\n");
out.append("data: \"c2\": " + arr[1].toString()+ ",\n" );
out.append("data: }\n\n");
out.flush();

但是,现在我只想在有 5 条这样的消息时才 out.flush。那么,我该怎么做呢?创建 Json 消息?具有单独的数据:{} 正文。如果这样做,我如何使用 javascript 在客户端访问成对的 c1、c2?还有什么选择。

PS:当我说 5 个值时,我指的是 c1 和 c2 的 5 对值。

如果我这样做,我如何在客户端使用 javascript 访问值

out.append("data: [\n");
for(int j=0; j<5; j++) {
String[] arr = strLine.split(",");
if (j!=0) out.append(",\n");
out.append("\{"c1\": " + arr[0].toString()+ ",\n");
out.append(\"c2\": " + arr[1].toString()+"}" );
out.flush();
}
//HEY MR, LOOK BELOW ME
//HEY MR, LOOK BELOW ME
//HEY MR, LOOK BELOW ME
//HEY MR, LOOK BELOW ME
out.append("]\n"); <---- HEY RIGHT HERE
//HEY MR, LOOK ABOVE ME
//HEY MR, LOOK ABOVE ME
//HEY MR, LOOK ABOVE ME
//HEY MR, LOOK ABOVE ME
out.flush();

按要求工作 JS 代码(在正文加载时调用 registerSSE()):

function registerSSE(){
var source = new EventSource ('http://localhost:8080/SSE_Test1/ReadCsv');
source.addEventListener('message', function(e) {
var data = JSON.parse(e.data);
console.log(data.timestamp, data.c1, data.c2, data.c3, data.c4);
}

而在 servlet 中,您只需要附加这一行:

response.setContentType("text/event-stream");

最佳答案

请不要手动生成/解析 JSON 字符串。在 Java 中,使用 org.json在 Javascript 中,使用 JSON.parseJSON.stringify

MDN:parsestringify

要输出 5 对,你会做类似的事情:

String[] arr = strLine.split(",");
JSONArray array = new JSONArray();
for(int i=0, j=0;i<arr.length;i+=2,j++){
JSONObject dataObj = new JSONObject();
dataObj.put("c1", arr[i]);
dataObj.put("c2", arr[i+1]);
array.put(j, dataObj);
if ((j > 0) && (j % 5 ==0)) {
out.append("data: " +array.toString() + "\n");
out.flush();
array = new JSONArray(); // start with a new one
}
}

要在客户端访问它,给定您的 EventSource source:

source.addEventListener('message', function(e) {
var data = JSON.parse(e.data); // data is an array of {c1:...,c2:...} objects
for (var i = 0; i < data.length; i++) { // it should be 5 in length
console.log('c1 is: '+data[i].c1+' and c2 is '+data[i].c2);
}
}

关于javascript - 将 JSON 数组添加到服务器端事件的返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12787456/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com