2

現在、私はJSON形式でデータを書き込んでいます。一度に1つのメッセージを次のように記述します。

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);
}

サーブレットでは、次の行を追加する必要があります。

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

2 に答える 2

8

JSON文字列を手動で生成/解析しないでください。Javaではorg.jsonを使用し、Javascriptではとを使用JSON.parseJSON.stringifyます。

MDN:解析文字列化

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);
    }
}
于 2012-10-08T18:39:54.123 に答える
1

JavaScriptでJSON文字列にアクセスするには、次のようにします。

var myJson = JSON.parse(myJsonString);
于 2012-10-08T18:40:18.940 に答える