3

mqtt を使用して指定された URL に json データを公開する次のコードがあります。初期データは http から取得されます。

var request = require('request');
var JSONStream = require('JSONStream');
var es = require('event-stream');
var mqtt = require('mqtt');
request({url: 'http://isaacs.couchone.com/registry/_all_docs'})
    .pipe(JSONStream.parse('rows.*'))
    .pipe(es.mapSync(function (data) {
    console.info(data);
    var client = mqtt.createClient(1883, 'localhost');
    client.publish('NewTopic', JSON.stringify(data));
    client.end();
return data;
}))

以下は、mqtt を介して (上記のコードで) 公開されたデータをサブスクライブするサブスクライバー コードです。

var mqtt = require('mqtt');
var client = mqtt.createClient();
client.subscribe('NewTopic');
client.on('message', function(topic, message) {
  console.info(message);
});

上記のコードでは、'message' で指定した url のすべての json データを取得します。受信したデータから 'id' と 'value' を抽出し、単一の JSON オブジェクトとして作成し、mqtt に公開する必要があります。別のクライアントが 'id' と 'value' のみを json データとしてサブスクライブできるようにします。

4

1 に答える 1

1

JSON テキストをオブジェクトに変換するには、eval() 関数を使用できます。eval() は JavaScript コンパイラを呼び出します。JSON は JavaScript の適切なサブセットであるため、コンパイラはテキストを正しく解析し、オブジェクト構造を生成します。JavaScript の構文のあいまいさにつまずかないように、テキストは括弧で囲む必要があります。

var myObject = eval(message);

eval 関数は非常に高速です。ただし、任意の JavaScript プログラムをコンパイルおよび実行できるため、セキュリティ上の問題が発生する可能性があります。eval の使用は、ソースが信頼され、有能である場合に示されます。JSON パーサーを使用する方がはるかに安全です。XMLHttpRequest を介した Web アプリケーションでは、そのページを提供する同じオリジンに対してのみ通信が許可されるため、信頼されます。しかし、それは有能ではないかもしれません。サーバーの JSON エンコーディングが厳密でない場合、またはすべての入力を綿密に検証しない場合、危険なスクリプトを含む無効な JSON テキストを配信する可能性があります。eval 関数はスクリプトを実行し、悪意を解き放ちます。

これを防ぐには、JSON パーサーを使用する必要があります。JSON パーサーは JSON テキストのみを認識し、すべてのスクリプトを拒否します。ネイティブ JSON サポートを提供するブラウザーでは、JSON パーサーも eval よりもはるかに高速です。

var myObject = JSON.parse(message);

そしてそれをオブジェクトとして使用します:

myObject.id;
myObject.value;

id と value だけでオブジェクトを作成します。

var idAndValueObj = {};
idAndValueObj.id = myObject.id;
idAndValueObj.value = myObject.value;

JSON 文字列に変換します。

var jsonStr = JSON.stringify(idAndValueObj);
于 2014-07-23T07:39:22.907 に答える