実行中のサービスに JSON データを投稿するシミュレーターを構築しています。
JSON は次のようになります。
{"sensor":
{"id":"SENSOR1","name":"SENSOR","type":"Temperature","value":100.12,"lastDateValue":"\/Date(1382459367723)\/"}
}
Chromeの「高度なRESTクライアント」でこれを試しましたが、これはうまくいきます。日付は、ServiceStack Web サービスによって適切に解析されます。
つまり、ポイントは、このようなデータを Web サービスに投稿するセンサー シミュレーターを作成することです。
これをJavaで作成したので、ラズベリーパイで実行できました。
これはコードです:
public static void main(String[] args) {
String url = "http://localhost:63003/api/sensors";
String sensorname = "Simulated sensor";
int currentTemp = 10;
String dateString = "\\" + "/Date(" + System.currentTimeMillis() + ")\\" + "/";
System.out.println(dateString);
System.out.println("I'm going to post some data to: " + url);
//Creating the JSON Object
JSONObject data = new JSONObject();
data.put("id", sensorname);
data.put("name", sensorname);
data.put("type", "Temperature");
data.put("value", currentTemp);
data.put("lastDateValue", dateString);
JSONObject sensor = new JSONObject().put("sensor", data);
//Print out the data to be sent
StringWriter out = new StringWriter();
sensor.write(out);
String jsonText = out.toString();
System.out.print(jsonText);
//Sending the object
HttpClient c = new DefaultHttpClient();
HttpPost p = new HttpPost(url);
p.setEntity(new StringEntity(sensor.toString(), ContentType.create("application/json")));
try {
HttpResponse r = c.execute(p);
} catch (Exception e) {
e.printStackTrace();
}
}
このプログラムの出力は次のとおりです。
\/Date(1382459367723)\/
I'm going to post some data to: http://localhost:63003/api/sensors
{"sensor":{"lastDateValue":"\\/Date(1382459367723)\\/","id":"Simulated sensor","name":"Simulated sensor","value":10,"type":"Temperature"}}
ここでの問題は、JSONObject 文字列にこれらのエスケープ文字がまだ含まれていることです。しかし、最初に文字列を印刷すると、エスケープ文字が含まれていません。これらを取り除く方法はありますか?私のサービスはこれらを解析できません..
これは、クロムの残りのクライアントで送信するもののサンプルです。
{"sensor":{"id":"I too, am a sensor!","name":"Willy","type":"Temperature","value":100.12,"lastDateValue":"\/Date(1382459367723)\/"}}