JSONObject包含转义字符

我正在构建一个模拟器,以将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字符串仍然包含这些转义字符。但是,当我在开头打印字符串时,它不包含转义字符。有什么办法摆脱这些?我的服务无法解析这些。

这是我与chrome的其余客户端一起发送的示例:

 {"sensor":{"id":"I too, am a sensor!","name":"Willy","type":"Temperature","value":100.12,"lastDateValue":"\/Date(1382459367723)\/"}}

回答:

JSONObject正确编码了字符串。本页描述如何在JavaScript(以及扩展名JSON)中转义字符串文字。以下说明对于理解示例中的内容很重要:

对于表2.1中未列出的字符,将忽略前面的反斜杠,但不建议使用此用法,应避免使用。

您的示例("\/Date(1382459367723)\/")在之前使用反斜杠/。由于/不在表2.1中,因此\应将其忽略。如果您的服务没有忽略\,那么它要么有错误,要么不是JSON解析器(也许它使用的数据格式与JSON相似,但不完全相同)。

由于您需要生成不符合标准的JSON,因此您将无法使用标准工具来这样做。您的两个选择是编写自己的非相当JSON编码器,或者避免必须转义的字符,例如\"

以上是 JSONObject包含转义字符 的全部内容, 来源链接: utcz.com/qa/432279.html

回到顶部