Java中OutputStreamWriter中的字符串对象与字符串文字
我正在向发送JSON字符串的HTTP服务器发出请求。我使用Gson序列化和反序列化JSON对象。今天我观察到了这种我不理解的奇怪行为 我有:Java中OutputStreamWriter中的字符串对象与字符串文字,java,json,httpurlconnection,Java,Json,Httpurlconnection,我正在向发送JSON字符串的HTTP服务器发出请求。我使用Gson序列化和反序列化JSON对象。今天我观察到了这种我不理解的奇怪行为 我有: String jsonAsString = gson.toJson(jsonAsObject).replace("\"", "\\\""); System.out.println(jsonAsString); 这正好输出了以下内容: {\"content\":\"Literal\",\"pos\":{\"left\":20,\"top\":20}} 现
String jsonAsString = gson.toJson(jsonAsObject).replace("\"", "\\\"");
System.out.println(jsonAsString);
这正好输出了以下内容:
{\"content\":\"Literal\",\"pos\":{\"left\":20,\"top\":20}}
现在,我使用从HttpURLConnection
获取的OutputStreamWriter
生成带有JSON负载的HTTP、PUT请求。上述要求适用于:
os.write("{\"content\":\"Literal\",\"pos\":{\"left\":20,\"top\":20}}");
然而,当我说:
os.write(jsonAsString);
…请求不起作用(此服务器不返回任何错误,但我可以看到,当将JSON作为字符串对象写入时,它没有做它应该做的事情)。在字符串对象上使用字符串文字是否有区别。我做错什么了吗
以下是片段:
public static void EditWidget(SurfaceWidget sw, String widgetId) {
Gson gson = new Gson();
String jsonWidget = gson.toJson(sw).replace("\"", "\\\"");
System.out.println(jsonWidget);
try {
HttpURLConnection hurl = getConnectionObject("PUT", "http://fltspc.itu.dk/widget/5162b1a0f835c1585e00009e/");
hurl.connect();
OutputStreamWriter os = new OutputStreamWriter(hurl.getOutputStream());
//os.write("{\"content\":\"Literal\",\"pos\":{\"left\":20,\"top\":20}}");
os.write(jsonWidget);
os.flush();
os.close();
System.out.println(hurl.getResponseCode());
} catch (IOException e) {
e.printStackTrace();
}
}
删除.replace(“\”,“\\\”)
指令。没必要
在发送JSON字符串文字时,必须在双引号之前添加斜杠,因为在Java字符串文字中,双引号必须转义(否则,它们将标记字符串的结尾,而不是字符串中的双引号)
但是字节码中的实际字符串不包含这些反斜杠。它们仅在源代码中使用。删除。替换(“\”,“\\\”)
指令。没必要
在发送JSON字符串文字时,必须在双引号之前添加斜杠,因为在Java字符串文字中,双引号必须转义(否则,它们将标记字符串的结尾,而不是字符串中的双引号)
但是字节码中的实际字符串不包含这些反斜杠。它们只在源代码中使用