【发布时间】:2013-10-26 16:44:06
【问题描述】:
我正在构建一个模拟器来将 JSON 数据发布到我正在运行的服务中。
JSON 应该如下所示:
{"sensor":
{"id":"SENSOR1","name":"SENSOR","type":"Temperature","value":100.12,"lastDateValue":"\/Date(1382459367723)\/"}
}
我在 Chrome 中使用“高级 REST 客户端”进行了尝试,效果很好。 ServiceStack 网络服务正确解析了日期。
所以,重点是编写一个传感器模拟器,将这样的数据发布到 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 字符串仍然包含这些转义字符。但是当我在开头打印字符串时,它不包含转义字符。有没有办法摆脱这些?我的服务无法解析这些..
这是我在 chrome 中与其余客户端一起发送的示例:
{"sensor":{"id":"I too, am a sensor!","name":"Willy","type":"Temperature","value":100.12,"lastDateValue":"\/Date(1382459367723)\/"}}
【问题讨论】:
-
如果您的服务无法解析转义字符,那么这不是服务中的错误吗?修复解析器而不是尝试生成不正确的 JSON。
-
恐怕不是我的服务实现。我正在使用 ServiceStack WCF 服务。所以我真的无法解决这个问题。我的意思是,如果字符串以正确的方式表示,JSONObject 怎么会把它们放在那里?
-
在构造日期字符串时尝试对这些转义字符使用 unicode,并查看服务是否能够解释结果。 unicode 是 \ ==>
\u005c和 / ==>\u002f。
标签: java jsonobject